我有一張桌子 my_date
id 開始 END 1 2021-01-13 2021-04-15 1 2021-04-16 2021-11-28 1 2021-11-29 空 2 2021-05-05 2021-09-13 2 2021-09-13 2021-12-31 3 2020-01-09 2021-08-29 3 2021-08-30 2023-04-15
我想選擇具有 max(end)<= 2021-12-31 的 id 所以我的結果應該只是
id 開始 END 2 2021-09-13 2021-12-31
uj5u.com熱心網友回復:
您可以按日期限制過濾,然后按日期降序排序,最后只檢索第一行。
例如:
select *
from t
where end <= date '2021-12-31'
order by end desc
fetch next 1 rows only
結果:
ID START END
-- ---------- ----------
2 2021-09-13 2021-12-31
請參閱db<>fiddle 上的運行示例。
uj5u.com熱心網友回復:
嘗試這個:
SELECT id, Start, END
FROM
(
SELECT *
, ROW_NUMBER () OVER (PARTITION BY ID ORDER BY Start DESC) AS RN_
FROM
(
VALUES
(1, '2021-01-13', '2021-04-15')
, (1, '2021-04-16', '2021-11-28')
, (1, '2021-11-29', null)
, (2, '2021-05-05', '2021-09-13')
, (2, '2021-09-13', '2021-12-31')
, (3, '2020-01-09', '2021-08-29')
, (3, '2021-08-30', '2023-04-15')
) T (id, Start, END)
) T
WHERE RN_ = 1 AND END <= '2021-12-31'
dbfiddle 鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358145.html
