sql-server - 按每个 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
解决方案
也许不是最有效的,但这似乎给了你想要的输出:
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
推荐阅读
- ghostscript - GhostscriptError:-100 使用 camelot-py 时
- javascript - 如何使用 Express JS 在另一个文件夹中加载 .js 文件并进行渲染?
- amazon-web-services - AWS 控制台连续两次转换角色
- android - 无法在android中使用facebook登录
- node.js - NPM 不工作 我的 NPM 没有问题。(这可能不是 npm 的问题。上面可能有额外的日志输出。)
- sql - 如何在 Oracle SQL Developer 中拆分数据
- attributeerror - cuDF 用于文本/字符串
- algorithm - 要在另一组中搜索的一组字符串
- matlab - 如何在 MatLab 和/或 OriginLab 中对方程进行编码以拟合超泊松分布
- javascript - 如何将对象附加到数组中的每个项目