Sql server 枚举顺序?

Sql server 枚举顺序?,sql-server,tsql,Sql Server,Tsql,我有一个简单的测试表: namee是工人的名字 salaryStep是表示新加薪日期的日期 我需要找到我目前所处的阶段。基于给定日期 例如,如果给定的日期是2013年11月11日,那么我应该在id=2 所以逻辑很简单: 1通过salarystep DESC对表格进行排序 2从中,取第一个比@now小的项目 但当我通过 DECLARE @now date = '20131111' SELECT TOP 1 salaryStep FROM ( SELECT TOP

我有一个简单的测试表:

namee是工人的名字

salaryStep是表示新加薪日期的日期

我需要找到我目前所处的阶段。基于给定日期

例如,如果给定的日期是2013年11月11日,那么我应该在id=2

所以逻辑很简单:

1通过salarystep DESC对表格进行排序

2从中,取第一个比@now小的项目

但当我通过

DECLARE @now date = '20131111'
SELECT    TOP 1  salaryStep
FROM   (
           SELECT TOP 100 PERCENT
                  salaryStep
           FROM   [aaa].[dbo].[Table_1]
           ORDER BY
                  salaryStep DESC
       )         a
WHERE  a.salaryStep<=@now
答案是:

2013-10-02-不正确

所以我问:

问题1

看起来,虽然我在内部select:orderbysalarystep DESC中指定了,但枚举确实是从这个顺序开始的。为什么呢

问题2

正确的做法是什么

所需结果:

2013-10-15或id=2,无需担心,这应该足够了:

DECLARE @now date = '20131111'
SELECT    TOP 1  salaryStep
FROM [aaa].[dbo].[Table_1]
WHERE  salaryStep<=@now
ORDER BY salaryStep DESC

当您使用TOP 100%时,无论内部顺序如何,它都返回1。

表中有索引吗?只需执行简单的一列操作,从表1中选择SALARYSTEP ORDER SALARYSTEPDESC@Leptonatorid为,请参见我的修订。您能回答第一个问题吗?如何确保您的查询将返回“2013-10-15”?即使是日期“2013-10-02”也比您的@now date…@veljasije小,这是因为首先在哪里执行,然后选择,然后按订单,然后top@veljasije更学究一点:1。从2。3号。外层4。其中5。分组6人。立方体|汇总7。有8个。选择9。将10顺序与11顺序相异。顶我的错误,我没有看到顶1:
create table test(a int)
insert into test values (1)
insert into test values (2)
insert into test values (3)

select top 1 * from
(select top 100 percent a from test order by a desc) x