如何在 Laravel 8 中使用 PostgreSQL 中的子查询通过 group by 子句获取行值?

how to get row value with group by clause using subquery in PostgreSQL in Laravel 8?

这是我的table,首先我想获取每个MAXstatus_execstatus_exec =](date_sta) 然后我想按 status_exec 分组并得到 COUNT.

id_out_sta status_exec date_sta
1 2 2021-11-07
1 1 2021-11-28
1 5 2021-12-07
2 7 2021-04-02
2 2 2021-05-12
2 6 2021-08-07
3 2 2021-08-05
3 5 2021-08-28
4 2 2021-03-15
4 5 2021-04-25

我期望的结果应该如下:

status_exec COUNT
5 3
6 1

这是我的查询,但没有帮助:

SELECT id_out_sta, status_exec , max(date_sta) as max_date_sta
FROM public.status_exe 
join public.order_out on status_exe.id_out_sta = order_out.id_out
group by (id_out_sta);

请提出任何建议,查询生成器简单查询。

一个常见的解决方案是 row_number window 函数来查找每个组的最大值。在 CTE 中使用它然后聚合结果:

with s as (
    select *,
      Row_Number() over(partition by id_out_sta order by max_date_sta desc) rn
    from t
)
select status_exec, Count(*) "Count"
from s
where rn=1
group by status_exec

Example DB<>Fiddle

使用 DISTINCT ON 后跟子查询:

SELECT status_exec, COUNT(*) AS COUNT
FROM
(
    SELECT DISTINCT ON (status_exec) *
    FROM public.status_exe
    ORDER BY status_exec, max_date_sta DESC
) t
GROUP BY status_exec;

这是另一个使用计数 window 函数的例子。

SELECT * FROM (
SELECT DISTINCT ON (id_out_sta)
    status_exec,
    count(*) over(partition by status_exec)
  FROM t
  ORDER BY id_out_sta, max_date_sta DESC
) as list
GROUP BY 1,2

Fiddle 是 here