繁体   English   中英

SQL Server-用一行的MAX()值选择一行

[英]SQL Server - SELECT one row with the MAX() value on a column

这是我的表表结构

id  | Name          | Date          | VersionID
----+---------------+---------------+-------------------------------------
1   |  Item 1       | 10/15/2012    | F8883CA4-3603-476D-BA33-1BBB6B87A79F
1   |  Item 1       | 11/06/2012    | AA22DA27-87D1-42EC-96F6-A4846A45DF6B
1   |  Item 1       | 11/06/2018    | AA22DA27-87D1-42EC-96F6-A4846A45DF6B
2   |  Item 2       | 11/06/2015    | F8883CA4-3603-476D-BA33-1BBB6B87A79F
2   |  Item 2       | 12/15/2012    | AA22DA27-87D1-42EC-96F6-A4846A45DF6B
2   |  Item 2       | 1/19/2013     | F8883CA4-3603-476D-BA33-1BBB6B87A79F

从此表中,对于每个版本,我希望获得每个项目的最大日期。

id  | Name          | Date          | VersionID
----+---------------+---------------+-------------------------------------
1   |  Item 1       | 10/15/2012    | F8883CA4-3603-476D-BA33-1BBB6B87A79F
1   |  Item 1       | 11/06/2018    | AA22DA27-87D1-42EC-96F6-A4846A45DF6B
2   |  Item 2       | 11/06/2015    | F8883CA4-3603-476D-BA33-1BBB6B87A79F
2   |  Item 2       | 12/15/2012    | AA22DA27-87D1-42EC-96F6-A4846A45DF6B

我尝试了rankdense_rank函数,但是尝试的逻辑未返回预期结果。 有什么想法吗?

正常方法是使用row_number

select id, name, date, versionid
from (select s.*,
             row_number() over (partition by id, version_id order by date desc) as seqnum
      from structure s
     ) s
where seqnum = 1;

我们也可以通过使用MAX Condition和关联子查询来获得结果

DECLARE @Table1 TABLE 
    (id int, Name varchar(6), Date datetime, VersionID varchar(36))
;

INSERT INTO @Table1
    (id, Name, Date, VersionID)
VALUES
    (1, 'Item 1', '2012-10-15 05:30:00', 'F8883CA4-3603-476D-BA33-1BBB6B87A79F'),
    (1, 'Item 1', '2012-11-06 05:30:00', 'AA22DA27-87D1-42EC-96F6-A4846A45DF6B'),
    (1, 'Item 1', '2018-11-06 05:30:00', 'AA22DA27-87D1-42EC-96F6-A4846A45DF6B'),
    (2, 'Item 2', '2015-11-06 05:30:00', 'F8883CA4-3603-476D-BA33-1BBB6B87A79F'),
    (2, 'Item 2', '2012-12-15 05:30:00', 'AA22DA27-87D1-42EC-96F6-A4846A45DF6B'),
    (2, 'Item 2', '2013-01-19 05:30:00', 'F8883CA4-3603-476D-BA33-1BBB6B87A79F')
;

Select T.id,T.Name,TT.Dt,T.VersionID from @Table1 T
INNER JOIN (
select id,Name,MAX(Date)Dt,VersionID from @Table1 
GROUP BY id,Name,VersionID)TT
ON T.id = TT.id AND T.Date = TT.Dt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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