使用 DB2,您如何为一列选择具有 MAX 的行,然后在同一张表的另一列的结果子集中选择具有 MAX 的行?
Posted
技术标签:
【中文标题】使用 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? 【发布时间】:2020-03-11 07:59:44 【问题描述】:例如这是表 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 的 MAX() Seq_Num 和 Peter,在他的 MAX() Due_Date 上,没有 Seq_Num 002,所以值输出应该是 001。我如何通过 SQL 选择它( DB2)?
【问题讨论】:
【参考方案1】:试试这个:
/*
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;
【讨论】:
以上是关于使用 DB2,您如何为一列选择具有 MAX 的行,然后在同一张表的另一列的结果子集中选择具有 MAX 的行?的主要内容,如果未能解决你的问题,请参考以下文章
如何为每个 ID 获取具有 max(TIMESTAMP) 的行? [复制]
当您的实例位于 ELB 之后时,您如何为 AWS 建立维护页面?