我几天来一直在困惑这个问题,并且刚刚确定了我的困境的根源 - order by子句没有按预期工作。
脚本是这样的:
select * from my_table
order by change_effective_date, unique_id desc
change_effective_date是一个日期时间字段,unique_id是一个int字段。
我原本以为这会先给我最新的行(即change_effective_date中值最大的行)。但是,它首先给出最旧的行,而unique_id也是按升序排列的(这些ID通常是顺序的,所以我通常希望它们遵循与日期相同的顺序,尽管这不完全可靠)。 / p>
困惑,我转向Google,发现数据类型优先级会影响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,因为我认为它是连续的。)
如果有人能解释这里发生的事情,我真的很感激!
感谢。
答案 0 :(得分:2)
select * from my_table
order by change_effective_date desc, unique_id desc