SQL select top 101



我有一个奇怪的情况选择。我注意到,当我选择top 100时,记录不会从数据库返回,但当选择top 101时,记录出现在位置41。

查询如下:

select top 100 GroupId, count(HouseId)
from House h
group by h.GroupId
order by max([DateCreated]) desc

从所有关于前100名和前101名的讨论中,我注意到每个人都在说前101名使用了另一种算法,我们可能会遇到速度问题,但我的问题不是这个。在top 100中,我遗漏了一个应该出现在索引41的记录。有人注意到这种情况吗?

使用

order by max([DateCreated]) desc

在查询的TOP之前计算。每次您包含一个新的记录,max([DateCreated])根据它在所有其他记录中的值重新定位这个新记录。

这对我来说有意义的唯一方法是,如果您有许多具有相同max([DateCreated])的记录。当你运行这个命令时,你会得到什么:

select top 100 with ties GroupId, count(HouseId)
from House h
group by h.GroupId
order by max([DateCreated]) desc

如果您有超过100条记录,那么数据库在对结果集进行排序后只选择前100行。当您将其更改为TOP 101时,将添加另一行,并且由于聚集索引或其他查询引擎实现细节可能在查询不确定时影响行顺序,因此可能在第41行结束。

最新更新