我為表創建了按 ID 磁區的行號。我想為每個 ID 選擇 MAX 日期,但有些 MAX 日期是相同的,我也想選擇它們。我怎樣才能實作這個選擇?
原表:
| ROW_NUM | EMP_ID | EMP_ID2 | ID | 日期 |
|---|---|---|---|---|
| 1 | 568 | 444 | 4220 | 11-25-2020 |
| 2 | 568 | 501 | 4220 | 11-25-2020 |
| 3 | 569 | 443 | 4220 | 11-01-2020 |
| 4 | 510 | 501 | 4220 | 11-12-2020 |
| 1 | 550 | 411 | 4221 | 12-25-2020 |
| 2 | 568 | 520 | 4221 | 12-25-2020 |
| 3 | 410 | 415 | 4221 | 12-25-2020 |
| 4 | 510 | 591 | 4221 | 11-12-2020 |
| 1 | 954 | 345 | 4225 | 09-25-2020 |
| 2 | 568 | 520 | 4225 | 09-25-2020 |
| 3 | 400 | 789 | 4225 | 09-25-2020 |
| 4 | 510 | 554 | 4225 | 09-25-2020 |
| 5 | 210 | 801 | 4225 | 05-12-2020 |
選擇后的表格:
| ROW_NUM | EMP_ID | EMP_ID2 | ID | 日期 |
|---|---|---|---|---|
| 1 | 568 | 444 | 4220 | 11-25-2020 |
| 2 | 568 | 501 | 4220 | 11-25-2020 |
| 1 | 550 | 411 | 4221 | 12-25-2020 |
| 2 | 568 | 520 | 4221 | 12-25-2020 |
| 3 | 410 | 415 | 4221 | 12-25-2020 |
| 1 | 954 | 345 | 4225 | 09-25-2020 |
| 2 | 568 | 520 | 4225 | 09-25-2020 |
| 3 | 400 | 789 | 4225 | 09-25-2020 |
| 4 | 510 | 554 | 4225 | 09-25-2020 |
謝謝你。
uj5u.com熱心網友回復:
使用RANK代替ROW_NUMBER:
WITH cte AS (
SELECT *, RANK() OVER (PARTITION BY ID ORDER BY DATE DESC) rnk
FROM yourTable
)
SELECT ROW_NUM, EMP_ID, EMP_ID2, ID, DATE
FROM cte
WHERE rnk = 1
ORDER BY ID;
uj5u.com熱心網友回復:
您始終可以加入子查詢:
SELECT t.*
FROM my_table t
LEFT JOIN (SELECT id, MAX(date) AS max_date FROM my_table GROUP BY 1) subq
ON subq.id = t.id
WHERE t.date = subq.max_date
ORDER BY t.id;
uj5u.com熱心網友回復:
使用rank來代替:
select * from (
select rank() over (partition by id order by date desc) rn
from tablename
) t where rn = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382452.html
標籤:sql sql-server 查询语句
上一篇:拆分字串并洗掉最后一個值
