繁体   English   中英

在按多列分组之后选择1行SQL Server

[英]Select 1 row after group by multiple columns SQL Server

我有一个包含ids,versions,timestamp的表,我需要获取每个id的最新版本,其中版本数超过1。

例如

123 1.5 2015-03-28 08:21:04.563
123 1.4 2015-02-28 08:21:04.563
234 1.5 2015-06-28 08:21:04.563
234 1.4 2015-05-28 08:21:04.563
234 1.3 2015-04-28 08:21:04.563
345 1.5 2015-01-28 08:21:04.563

在上面的数据ID 123和234中有多个版本。我需要获取max(timestamp)以及ID和版本

产量

123 1.5 2015-03-28 08:21:04.563
234 1.5 2015-06-28 08:21:04.563

我有以下sql,每个ID给我1行,但是我只需要排除1个版本的ID。

 ;with versions as
(
    select  id, 
            version, 
            row_no = row_number() over (partition by id order by max(dt_create) desc), 
            dt_create = max(dt_create)
    from table_name
    group by id, version
)
select id,version,row_no, dt_create
from versions
where row_no=1
order by id

您不需要row_number中的汇总。 另外,您可能希望使用IN子句来限制您指定的ID。

附带说明,row_number比其他答案中使用的聚合要快得多。 您在原始查询中的不错选择。

 ;with versions as
(
    select  id, 
            version, 
            row_no = row_number() over (partition by id order by dt_create desc) 
    from table_name
)
select id,version,row_no, dt_create
from versions
where row_no=1 and id in (select id from versions where row_no > 1)
order by id

应该这样做:

    ;with mycte as (
select 123 as ID, 1.5 as version, '2015-03-28 08:21:04.563' as timestamp
union all 
select 123, 1.4, '2015-02-28 08:21:04.563'
union all 
select 234, 1.5, '2015-06-28 08:21:04.563'
union all 
select 234, 1.4, '2015-05-28 08:21:04.563'
union all 
select 234, 1.3, '2015-04-28 08:21:04.563'
union all 
select 345, 1.5, '2015-01-28 08:21:04.563'
)

Select ID
, max(version) as version
, max(timestamp) as timestamp
,count(*) as total
 from mycte
 group by ID
 having count(*) >1

您的查询已关闭。 添加HAVING子句以排除仅具有一个版本的记录

;with versions as
(
    select  id, 
            version, 
            row_no = row_number() over (partition by id order by max(dt_create) desc), 
            dt_create = max(dt_create)
    from table_name
    group by id, version
    having COUNT(*) > 1
)
select id,version,row_no, dt_create
from versions
where row_no=1
order by id

暂无
暂无

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

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