Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何通过在两列中的一列上分组来根据两列对数据进行排序?_Sql_Sorting - Fatal编程技术网

Sql 如何通过在两列中的一列上分组来根据两列对数据进行排序?

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 dte desc从语句历史(nolock)顺序选择*

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;