[英]SQL Server - Get the Latest Date With Grouping
我在SQL Server查询中遇到问题,无法弄清楚如何使其正常工作。 我尝试根据类别分组获得MAX日期。 我知道这听起来很困惑,所以让我解释一下我想要的结果。
假设我有这张桌子:
Table1
Category Value UpdatedDateTime
Cat1 5 2017-11-12 10:46
Cat1 2 2017-11-13 11:46
Cat1 4 2017-11-13 10:46
Cat2 5 2017-11-12 10:46
Cat2 7 2017-11-12 11:46
Cat2 3 2017-11-13 09:46
Cat3 1 2017-11-12 10:46
Cat3 2 2017-11-12 11:46
Cat3 7 2017-11-13 11:46
Cat3 8 2017-11-13 10:46
Cat3 3 2017-11-10 10:46
Cat4 4 2017-11-13 10:46
Cat4 4 2017-11-12 10:46
我希望结果中的UpdatedDateTime通过“类别”分组选择最新日期,如下所示:
Category Value UpdatedDateTime
Cat1 5 2017-11-13 11:46
Cat1 2 2017-11-13 11:46
Cat1 4 2017-11-13 11:46
Cat2 5 2017-11-13 09:46
Cat2 7 2017-11-13 09:46
Cat2 3 2017-11-13 09:46
Cat3 1 2017-11-13 11:46
Cat3 2 2017-11-13 11:46
Cat3 7 2017-11-13 11:46
Cat3 8 2017-11-13 11:46
Cat3 3 2017-11-13 11:46
Cat4 4 2017-11-13 10:46
Cat4 4 2017-11-13 10:46
我尝试了此查询,但是它当然不起作用,因为我在寻找整个表的Max(UpdatedDate),而不是按Category。 然后我被卡住了。
With cte AS
(
Select Category, Value, UpdatedDateTime FROM Table1
)
Select Category, Sum(Value)
, (Select Top 1 Max(UpdatedDateTime) FORM cte) AS UpdatedDateTime
FROM cte
Group By Category
请帮助,在此先感谢。
您可以通过分区窗口功能轻松地做到这一点。
declare @Something table
(
Category varchar(10)
, MyValue int
, UpdatedDateTime datetime
)
insert @Something values
('Cat1', 5, '2017-11-12 10:46')
, ('Cat1', 2, '2017-11-13 11:46')
, ('Cat1', 4, '2017-11-13 10:46')
, ('Cat2', 5, '2017-11-12 10:46')
, ('Cat2', 7, '2017-11-12 11:46')
, ('Cat2', 3, '2017-11-13 09:46')
, ('Cat3', 1, '2017-11-12 10:46')
, ('Cat3', 2, '2017-11-12 11:46')
, ('Cat3', 7, '2017-11-13 11:46')
, ('Cat3', 8, '2017-11-13 10:46')
, ('Cat3', 3, '2017-11-10 10:46')
, ('Cat4', 4, '2017-11-13 10:46')
, ('Cat4', 4, '2017-11-12 10:46')
select Category
, MyValue
, UpdatedDateTime = MAX(UpdatedDateTime) over(partition by Category)
from @Something
SELECT t1.Category, t1.Value, t2.maxDate AS UpdatedDateTime
FROM Table1 AS t1
INNER JOIN (Select Category, Max(UpdatedDateTime) AS maxDate FROM Table1 Group By Category)
t2 ON t2.Category = t1.Category
尝试此操作,您总是可以获得每个类别中的最新行
SELECT * FROM
(SELECT ROW_NUMBER()
OVER (PARTITION BY Category ORDER BY UpdatedDateTime DESC) AS RowNum,
* FROM Table1) AS Table2 WHERE RowNum = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.