[英]Using DB2, how do you select rows with MAX for one column and then select rows with MAX on the resulting subset for another column on the same table?
例如,這是表 PEOPLE 上的數據集:
Name Due_Date Seq_Num
Peter 2020-03-01 001
Peter 2020-03-01 002
Peter 2020-03-02 001
Paul 2020-03-03 001
Paul 2020-03-03 002
Paul 2020-03-04 001
Paul 2020-03-04 002
Mary 2020-03-05 001
Mary 2020-03-05 002
如果我執行 SELECT NAME, MAX(DUE_DATE), MAX(SEQ_NUM) FROM PEOPLE GROUP BY NAME,它將返回 ff:
Name Due_Date Seq_Num
Peter 2020-03-02 002
Paul 2020-03-04 002
Mary 2020-03-05 002
但我想要的是:
Name Due_Date Seq_Num
Peter 2020-03-02 001
Paul 2020-03-04 002
Mary 2020-03-05 002
因為我想要 MAX() Due_Date 和 Peter 的 MAX() Seq_Num,在他的 MAX() Due_Date 上,沒有 Seq_Num 002,所以值輸出應該是 001。我如何通過 SQL (DB2) 選擇它?
嘗試這個:
/*
WITH PEOPLE (Name, Due_Date, Seq_Num) AS
(
VALUES
('Peter', '2020-03-01', '001')
, ('Peter', '2020-03-01', '002')
, ('Peter', '2020-03-02', '001')
, ('Paul ', '2020-03-03', '001')
, ('Paul ', '2020-03-03', '002')
, ('Paul ', '2020-03-04', '001')
, ('Paul ', '2020-03-04', '002')
, ('Mary ', '2020-03-05', '001')
, ('Mary ', '2020-03-05', '002')
)
*/
SELECT Name, Due_Date, Seq_Num
FROM
(
SELECT Name, Due_Date, Seq_Num, RANK() OVER (PARTITION BY NAME ORDER BY Due_Date DESC, Seq_Num DESC) MX_
FROM PEOPLE
)
WHERE MX_ = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.