gpt4 book ai didi

sql - 如何使用 SQL 组过滤具有最大日期值的行

转载 作者:行者123 更新时间:2023-12-04 10:00:17 28 4
gpt4 key购买 nike

我有下表

CREATE TABLE Test
(`Id` int, `value` varchar(20), `adate` varchar(20))
;

INSERT INTO Test
(`Id`, `value`, `adate`)
VALUES
(1, 100, '2014-01-01'),
(1, 200, '2014-01-02'),
(1, 300, '2014-01-03'),
(2, 200, '2014-01-01'),
(2, 400, '2014-01-02'),
(2, 30 , '2014-01-04'),
(3, 800, '2014-01-01'),
(3, 300, '2014-01-02'),
(3, 60 , '2014-01-04')
;

我想实现只选择具有最大值日期的 Id 的结果。 IE

ID,值,日期
 1, 300,'2014-01-03'     
2, 30 ,'2014-01-04'
3, 60 ,'2014-01-04'

我如何使用 group by 来实现这一点?我做了如下,但它不工作。
Select Id,value,adate
from Test
group by Id,value,adate
having adate = MAX(adate)

有人可以帮忙查询吗?

最佳答案

如果您使用具有分析功能的 DBMS,您可以使用 ROW_NUMBER:

SELECT  Id, Value, ADate
FROM ( SELECT ID,
Value,
ADate,
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Adate DESC) AS RowNum
FROM Test
) AS T
WHERE RowNum = 1;

否则,您将需要通过 Id 连接到聚合的最大日期以过滤来自 Test 的结果。仅适用于日期与该 ID 的最大日期匹配的那些
SELECT  Test.Id, Test.Value, Test.ADate
FROM Test
INNER JOIN
( SELECT ID, MAX(ADate) AS ADate
FROM Test
GROUP BY ID
) AS MaxT
ON MaxT.ID = Test.ID
AND MaxT.ADate = Test.ADate;

关于sql - 如何使用 SQL 组过滤具有最大日期值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24140048/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com