【发布时间】:2019-01-08 17:32:42
【问题描述】:
我有一个使用此架构的每日日志的小表:
id (int, not null)
timestamp (datetime, not null)
costcenter (int, not null)
initials (varchar(3),null)
memo (varchar(250),not null)
ID 是一个自增的Identity 列。
这是我运行查询后的所有数据行
SELECT id, timestamp
FROM LOG
ORDER BY TIMESTAMP DESC
结果如下:
8 2018-12-30 10:51:08.000
7 2018-12-29 10:51:08.000
6 2018-12-13 10:51:08.000
5 2018-12-12 10:51:08.000
4 2018-01-04 08:31:00.000
3 2018-01-03 08:31:00.000
2 2018-01-02 08:45:00.000
1 2018-01-02 08:31:00.000
显然不是按时间戳降序排列!
如果我省略了DESC 关键字,则查询结果会按顺序(1-8)返回ID 列。所以看来我实际上是按 id 排序的,而不是时间戳。
我错过了什么吗?这是 ID 列的问题吗?
【问题讨论】:
-
实际上,它IS完全按日期降序排序 - 或者您认为哪些行应该以不同的方式排序? ?
-
是的...它按年、月、日、时、分、秒排序,这就是
DATETIME的排序方式。请注意,删除DESC会应用默认排序操作ASC。从您的架构和表名来看,我希望按ID和timestamp排序会得到相同的结果,因为ID是自动递增的,我假设timestamp是插入的记录也总是 > 上一条记录。 -
FWIW,当您省略 DESC 时,它将使用默认顺序作为 ASC 的顺序谓词。 :) 另外,请小心使用时间戳作为列名。它是一种数据类型,使用数据类型名称作为列或对象名称可能很难使用。
-
天哪,一月份的值应该是 2019 年,而不是 2018 年。完全是我的错,我很抱歉浪费大家的时间!
标签: sql-server datetime sql-order-by