T-SQL Order By - 数据类型优先级未按预期工作
T-SQL Order By - data type precedence not working as expected
几天来我一直在为这个问题困惑,并且刚刚确定了问题的根源 - 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 通常是连续的,所以我通常希望它们无论如何都遵循与日期相同的顺序,尽管这并不完全可靠)。
百思不得其解,我转向Google,发现数据类型优先级会影响子句的顺序,低级别的数据类型被转换为高级别的数据类型: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将是决胜局,因为我认为它是连续的)。
如果有人能解释这里发生了什么,我将不胜感激!
谢谢。
select * from my_table
order by change_effective_date desc, unique_id desc
几天来我一直在为这个问题困惑,并且刚刚确定了问题的根源 - 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 通常是连续的,所以我通常希望它们无论如何都遵循与日期相同的顺序,尽管这并不完全可靠)。
百思不得其解,我转向Google,发现数据类型优先级会影响子句的顺序,低级别的数据类型被转换为高级别的数据类型: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将是决胜局,因为我认为它是连续的)。
如果有人能解释这里发生了什么,我将不胜感激!
谢谢。
select * from my_table
order by change_effective_date desc, unique_id desc