Sql 如何通过在两列中的一列上分组来根据两列对数据进行排序?
我有以下一组数据。 按stmt dte desc从语句历史(nolock)顺序选择*Sql 如何通过在两列中的一列上分组来根据两列对数据进行排序?,sql,sorting,Sql,Sorting,我有以下一组数据。 按stmt dte desc从语句历史(nolock)顺序选择* stmt_key stmt_dte stmt_start_dte stmt_end_dte ----------- ----------------------- ----------------------- ----------------------- 12 2013-10-13 00:00:00.000 2013-07-
stmt_key stmt_dte stmt_start_dte stmt_end_dte
----------- ----------------------- ----------------------- -----------------------
12 2013-10-13 00:00:00.000 2013-07-10 00:00:00.000 2013-08-10 00:00:00.000
11 2013-10-12 00:00:00.000 2013-03-10 00:00:00.000 2013-04-10 00:00:00.000
10 2013-10-11 00:00:00.000 2013-07-10 00:00:00.000 2013-08-10 00:00:00.000
9 2013-10-10 00:00:00.000 2013-09-10 00:00:00.000 2013-10-10 00:00:00.000
8 2013-09-10 00:00:00.000 2013-08-10 00:00:00.000 2013-09-10 00:00:00.000
7 2013-08-10 00:00:00.000 2013-07-10 00:00:00.000 2013-08-10 00:00:00.000
6 2013-07-10 00:00:00.000 2013-06-10 00:00:00.000 2013-07-10 00:00:00.000
5 2013-06-10 00:00:00.000 2013-05-10 00:00:00.000 2013-06-10 00:00:00.000
4 2013-05-10 00:00:00.000 2013-04-10 00:00:00.000 2013-05-10 00:00:00.000
3 2013-04-10 00:00:00.000 2013-03-10 00:00:00.000 2013-04-10 00:00:00.000
2 2013-03-10 00:00:00.000 2013-02-10 00:00:00.000 2013-03-10 00:00:00.000
1 2013-02-10 00:00:00.000 2013-01-10 00:00:00.000 2013-02-10 00:00:00.000
我的要求如下。
1.最新stmt_dte的行应位于顶部
2.与顶行的stmt_dte匹配的所有其他行都应按stmt_dte排序,以此类推
预期输出应按以下顺序进行
stmt_key
--------
12
10
7
11
3
10
9
8
6
5
4
2
1
我如何做到这一点?有人能提出更好的方法吗?您似乎正在使用SQL Server。逻辑似乎是:
- 使用相同的
将记录保存在一起stmt\u start\u dte
- 按最大
stmt\u dte
max()
window函数执行此操作:
select stmt_key, stmt_dte, stmt_start_dte, stmt_end_dte
from (select sh.*, max(stmt_dte) over (partition by stmt_start_dte) as grp
from STATEMENT_HISTORY sh
) sh
order by grp desc, stmt_dte desc;