簡體   English   中英

使用 DB2,如何為一列選擇具有 MAX 的行,然后在結果子集上為同一表的另一列選擇具有 MAX 的行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM