| ID | 日期 | col1 |
|---|---|---|
| 1 | 01-01-2022 | 蘋果 |
| 1 | 01-02-2022 | 橘子 |
自從我使用 sql(使用 oracle fyi)以來已經有一段時間了。如果我想提取具有最新日期的唯一 ID(在這種情況下,只應在結果中提取第二行),我該怎么做?
我試過:
SELECT ID, MAX(DATE), col1
FROM table
GROUP BY ID
現在這不起作用,因為我需要在 SELECT 中聚合 col1 或將其放入 GROUP BY 中。如果我把它放在 GROUP BY 中,我會在結果中得到兩行,對吧?但是,如果我想要基于 max(date) 的行,我也看不到聚合 col1 的意義。我在這里錯過了什么嗎?
uj5u.com熱心網友回復:
您可以使用LAG()、LEAD() ROW_NUMBER()函式來實作此目標。檢查我的以下查詢。
使用滯后():
SELECT
ID,
DATE,
col1
FROM
(
SELECT
*,
LAG(DATE, 1) OVER(Partition By ID ORDER BY DATE DESC) AS DateOfPreviousRow
FROM Table
) T
WHERE DateOfPreviousRow IS NULL
使用鉛():
SELECT
ID,
DATE,
col1
FROM
(
SELECT
*,
LEAD(DATE, 1) OVER(Partition By ID ORDER BY DATE) AS DateOfPreviousRow
FROM Table
) T
WHERE DateOfPreviousRow IS NULL
使用 ROW_NUMBER():
SELECT T.* FROM
(
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DATE DESC) AS ROWNumber
FROM Table
) T
WHERE ROWNumber = 1
uj5u.com熱心網友回復:
您可以使用ROW_NUMBER(). 例如:
select *
from (
select t.*,
row_number() over(partition by id order by date desc) as rn
from t
) x
where rn = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417570.html
標籤:
上一篇:如何在sql中呼叫動態日?
下一篇:帶有OVER子句的嵌套SUM
