繁体   English   中英

SQL Server-获取分组的最新日期

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM