繁体   English   中英

按ID分组并选择最新

[英]Group by id and select most recent

我有一个这样的表格示例:

 date        id     status
 01/01/2013  55555  high 
 01/01/2014  55555  low 
 01/01/2010  44444  high
 01/01/2011  33333  low

我需要按顺序排列: group by id并选择最近的日期。

这是我想要的结果。

 date        id     status
 01/01/2014  55555  low 
 01/01/2010  44444  high
 01/01/2011  33333  low

我不在乎行的顺序。

您需要使用一个子查询将表联接起来,该子查询“链接”记录日期和每个ID的最大日期:

select a.*
from your_table as a
     inner join (
         select id, max(date) as max_date 
         from your_table 
         group by id
     ) as b on a.id = b.id and a.date = b.max_date;

我认为您将需要一个子查询来获取MAX(Date),然后进行内部联接。 尝试这个:

SELECT A.[Date], A.[Id], A.[Status]
FROM Table A
INNER JOIN(SELECT Id, MAX([Date]) AS MaxDate
FROM Table
GROUP BY [Id]) B ON
A.[Id] = B.[Id] AND
A.[Date] = B.[MaxDate]

-返回组ID和该组中的最新日期

select id
, MAX([date]) [latestDateInGroup]
from tbl 
group by id

-返回组ID以及该组中最新日期的记录的相关状态和日期

select id
, [status] [latestDateInGroup'sStatus]
, [date] [latestDateInGroup]
from
(
    select id
    , [status]
    , [date]
    , row_number() over (partition by id order by [date] desc) r
    from tbl
) x
where x.r = 1

-返回所有ID和状态,以及该组的组中的最新日期(需要SQL 2012+)

select id
, [status]
, max([date]) over (partition by id order by [date] desc) [latestDateInGroup]
from tbl

SQL Fiddle目前处于离线状态; 一旦备份,以下代码应允许您使用http://sqlfiddle.com建立表以测试上述查询

create table tbl ([date] date, id bigint, [status] nvarchar(4))
go

insert tbl select '2013-01-01', 55555, 'high'
insert tbl select '2014-01-01', 55555, 'low' 
insert tbl select '2010-01-01', 44444, 'high'
insert tbl select '2011-01-01', 33333, 'low'

暂无
暂无

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

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