這是我的表,首先我想status_exec每個MAX (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 | 數數 |
|---|---|
| 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);
請提出任何建議、查詢構建器或簡單查詢。
uj5u.com熱心網友回復:
一個常見的解決方案是row_number視窗函式來找到每個組的最大值。在 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
示例資料庫<>小提琴
uj5u.com熱心網友回復:
使用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;
uj5u.com熱心網友回復:
這是使用計數視窗函式的另一個示例。
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
小提琴在這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369146.html
標籤:sql 数据库 PostgreSQL的 laravel-8 laravel 查询构建器
