我有一個表,我試圖在其中查找所有關聯的確認 = 1 的最大日期的 ID。主鍵是 ID 和日期。
| ID | 日期 | 確認的 |
|---|---|---|
| 鮑勃 | 20210101 | 1 |
| 鮑勃 | 20210201 | 1 |
| 鮑勃 | 20210301 | 0 |
| 吉姆 | 20210101 | 0 |
| 吉姆 | 20210201 | 1 |
在這種情況下,應該只回傳 Jim,因為最大日期是 20210201 并且被標記為 1。Bob 沒有被回傳,因為 20210301 是最大日期被標記為 0。
uj5u.com熱心網友回復:
您可以使用MAX分析函式查找每個的最新日期,ID然后篩選與最大日期匹配并得到確認的記錄。
WITH
sample_data (id, dt, confirmed)
AS
(SELECT 'Bob', '20210101', 1 FROM DUAL
UNION ALL
SELECT 'Bob', '20210201', 1 FROM DUAL
UNION ALL
SELECT 'Bob', '20210301', 0 FROM DUAL
UNION ALL
SELECT 'Jim', '20210101', 0 FROM DUAL
UNION ALL
SELECT 'Jim', '20210201', 1 FROM DUAL)
SELECT DISTINCT id
FROM (SELECT d.id,
d.dt,
confirmed,
MAX (d.dt) OVER (PARTITION BY d.id ORDER BY d.dt DESC) AS max_dt
FROM sample_data d)
WHERE dt = max_dt AND confirmed = 1;
uj5u.com熱心網友回復:
您可以使用分析函式,例如 ROW_NUMBER()
SELECT DISTINCT id
FROM
( SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY id
ORDER BY TO_DATE("date",'yyyymmdd') DESC ) AS rn
FROM t )
WHERE rn = 1
AND confirmed = 1
按“日期”降序排序并按“日期”分組將產生每個主鍵值具有最大日期值的所需記錄
附注。"date" 假定為字串,并轉換為日期型別
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349939.html
上一篇:結合jsonb資料中的月份和年份PostgreSQL11.5
下一篇:如何進行條件連接
