sql server行号顺序依次为

时间:2016-11-16 23:12:12

标签: sql sql-server sql-server-2008 tsql

我在sql server 2014中有一个下表

Empno Resign      Hour Dept
1000  2999-01-01   40    20 
1000  2999-01-01   40    21
1001  2999-01-01   40    22
1001  2999-01-01   40    23

我需要根据辞职日期和小时选择最高记录。部门与哪个部门相关并不重要。所以我去了查询

SELECT *
FROM( 
      SELECT Empno,Resign, Hour, Dept,
             ROW_NUMBER() OVER(PARTITION BY Empno ORDER BY Resign DESC,
                                                                    hour DESC) AS Row
      FROM Table ) AS master
WHERE master.Row = 1
  AND master.Empno = '1000';

我回来了

EmployeeNumber  ResignationDate Hour Dept   Row
1000               2999-01-01   40     20    1

我理解sql server不保证行号的顺序(在本例中是dept的行),除非为Dept指定了order by子句。

我不介意哪个行会被哪个部门选中,但是这会根据一些索引或ID一致地选择一个,查询计划将如何生成顶部?

在row_number中我可以简单地添加另一个基于dept的orderby,这样它就可以一直拿起一个但我不想这样做。

1 个答案:

答案 0 :(得分:0)

否。您必须使用唯一组合添加order by以强制执行非任意输出。

为什么?它的简单问题 - sql server不会将表视为人类。他阅读并找到不可能不在附近或连续的页面。