对非唯一列进行确定性排序

问题描述 投票:0回答:1

我正在使用 SQL Server 从数据库中提取数据 - 我正在对日期列进行排序,但该列并不唯一,因为日期可以在该列中出现多次。每次运行查询时,我都需要数据保持相同的顺序,并且我注意到,如果有两行具有相同的日期,则它们出现的顺序可能会在每次运行查询时发生变化。

我的查询的简短示例:

SELECT
    ConstituentID,
    ConstituentName,
    ContactType,
    ContactDate
FROM 
    table
ORDER BY 
    ConstituentID, ContactDate

一个选民可以在同一天有多个联系人,我需要每次运行代码时它们都保持相同的顺序,它是日期列而不是日期时间,所以我也无法按时间排序。有没有办法强制查询每次都以相同的顺序输出数据?或者,如果一个选民在同一天有两个联系人,是否有办法设置最后出现的联系人类型?

我想到的唯一类似的事情是 R 中的 set.seed() 命令,但不确定是否有类似于 SQL 中的命令可以给我需要的结果。

sql sql-server sql-order-by
1个回答
0
投票

有没有办法强制查询每次都以相同的顺序输出数据?

是的。每个表都有一个键(或应该),并且键是唯一的。因此,将某个键的所有列添加到 ORDER BY 子句中,查询将具有确定性的排序。例如:

SELECT
    ConstituentID,
    ConstituentName,
    ContactType,
    ContactDate
FROM 
    table
ORDER BY 
    ConstituentID, ContactDate, ID
© www.soinside.com 2019 - 2024. All rights reserved.