首页 > 解决方案 > 按每个 ID 的最大日期排序,然后按相同 ID 排序其他记录,然后按最大日期排序其他 ID

问题描述

我有每个 ID 多行的数据。我想首先按最大日期排序,但将具有相同 ID 的其他行按日期降序排列在一起,然后是下一组 ID 与下一个最大日期,依此类推。

例如,这个数据

create table #tbl (id int, dt date);
insert into #tbl (id, dt)
values (1, '2020-07-01')
     , (1, '2020-07-17')
     , (1, '2020-07-31')
     , (2, '2020-07-07')
     , (2, '2020-07-14')
     , (2, '2020-07-16')
     , (3, '2020-07-02')
     , (3, '2020-07-20')
;

将输出为

id  dt
1   7/31/2020
1   7/17/2020
1   7/1/2020
3   7/20/2020
3   7/2/2020
2   7/16/2020
2   7/14/2020
2   7/7/2020

因此 id 1 具有最大日期,然后其他 id 1 行按日期降序排列。接下来,id 3 具有剩余行中的最大日期,然后其他 id 3 行按日期降序排列,依此类推。

我可以获得最大日期和行号,但它是按日期排序的,然后是 ID,并且不会将 ID 组合在一起。

版本:Microsoft SQL Azure (RTM) - 12.0.2000.8 Jul 31 2020 08:26:29 Copyright (C) 2019 Microsoft Corporation

标签: sql-server

解决方案


也许不是最有效的,但这似乎给了你想要的输出:

declare @tempTbl table (id int, dataorder int)
insert into @tempTbl 
select 
    id,
    ROW_NUMBER() over (order by max(dt) desc)
from
    #tbl
group by id 
order by max(dt) desc



select
    tbl2.id,
    tbl2.dt
from 
    @tempTbl tbl1 left join #tbl tbl2 on tbl1.id = tbl2.id
order by 
    tbl1.dataorder,
    tbl2.dt desc

推荐阅读