Coa*_*der 1 sql t-sql sql-server
不知道这里发生了什么,希望有人可以对此有所了解.
两个查询,几乎相同,除了第一个只选择一个日期列,而第二个选择另一个列:
SELECT TOP 1 CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
返回
CreationDate
1802-11-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
第二个查询
SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
返回
CreationDate
1994-02-14 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
第二个是合理的和预期的,或多或少可追溯到数据集创建时.我跑了第二套,更改了ORDER BY 1 DESC并得到了
CreationDate
5202-11-01 00:00:00.000
Rct_Id CreationDate
714350 2015-02-27 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,为什么日期会像这样在自己选择时改变.关于发生了什么的任何想法?
ORDER BY 1
是序数的顺序,这是SELECT中的第一列
SELECT TOP 1 CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
意味着从CreationDate
递增排序的表收据中获取一条记录.
SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
意味着从Rct_id
递增排序的表收据中获取一条记录
要获得与第一个查询相同的结果,请使用ORDER BY 2
或明确指定列名(良好实践).同样适用于DESC
.
SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY CreationDate /* Or ORDER BY 2 */
Run Code Online (Sandbox Code Playgroud)