【发布时间】:2018-02-17 08:34:27
【问题描述】:
我已经为这个问题困惑了好几天,并且刚刚确定了我的问题的根源 - order by 子句没有按预期工作。
脚本如下:
select * from my_table
order by change_effective_date, unique_id desc
change_effective_date 是 datetime 字段,unique_id 是 int 字段。
我原以为这会首先给我最近的行(即 change_effective_date 中值最高的行)。但是,它首先给出最旧的行,并且 unique_id 也是按升序排列的(这些 ID 通常是连续的,所以我通常希望它们遵循与日期相同的顺序,尽管这并不完全可靠)。
不解,我求助于谷歌,发现数据类型优先级会影响 order by 子句,将较低级别的数据类型转换为较高级别的数据类型:https://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of-data-type-precedence/
但是,datetime 优先于 int,所以它不应该受到这种方式的影响。
更奇怪的是,如果我从 order by 子句中取出 unique_id,它会完美地按日期降序对数据进行排序。不过,我确实想向 order by 子句添加一个唯一标识符,因为可能有多个行具有相同的日期,并且在脚本中我想识别最新的行(在这种情况下,unique_id 将是领带-breaker,因为我认为它是连续的)。
如果有人能解释这里发生了什么,我将不胜感激!
谢谢。
【问题讨论】:
标签: sql-server tsql sql-order-by sqldatatypes operator-precedence