2
A
回答
2
SELECT *
from [order]
WHERE OrderDate = (SELECT min(OrderDate) from [order])
1
使用order by
沙top
:
select top 1 o.*
from orders o
order by orderdate asc;
編輯:
如果你想重複使用with ties
:
select top 1 with ties o.*
from orders o
order by orderdate asc;
+1
這將只返回最上面的1行,如果有多行,OrderDate = min(OrderDate)' –
+0
@ M.Ali。 。 。這個問題用單數表示:「該記錄的所有列」。無論如何,使用'with tie'來獲取所有具有相同值的行是很容易的。 –
1
雖然M. Ali's answer是準確的,但根據表的大小和索引配置,可能會導致性能下降。它需要兩次讀取表格。
在SQL Server 2005及更高版本上,可以使用窗口函數並將計劃限制爲通過表單讀取。對於非常小的數據集,查詢成本實際上更高,但讀取次數減半。對於大型數據集,這應該會導致顯着優異的性能。
代碼示例:
SET NOCOUNT ON;
-- Populate Test Data
DECLARE @Orders TABLE (OrderNum int IDENTITY, OrderDate datetime);
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-04');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-04');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-04');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-05');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-05');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-06');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-07');
INSERT INTO @Orders (OrderDate) VALUES ('2015-04-07');
-- Run Tests
SET STATISTICS IO ON;
PRINT 'Full Table';
SELECT * FROM @Orders;
PRINT 'Results using MIN';
SELECT *
FROM @Orders
WHERE OrderDate = (SELECT min(OrderDate) FROM @Orders);
PRINT 'Results using RANK';
WITH BaseData AS
(
SELECT
*,
RANK() OVER (ORDER BY OrderDate) AS OrderDateRank
FROM @Orders
)
SELECT *
FROM BaseData
WHERE OrderDateRank = 1;
SET STATISTICS IO OFF;
SET NOCOUNT OFF;
查詢費用:
MIN: 0.0065718
RANK: 0.014645
統計:
Full Table
Table '#1E0C7C2B'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Results using MIN
Table '#1E0C7C2B'. Scan count 2, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Results using RANK
Table '#1E0C7C2B'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
相關問題
- 1. MySQL:選擇有史以來記錄的最早2次(上午)
- 2. 在MYSQL選擇 - 選擇所有記錄
- 3. 如何選擇所有的最新記錄所有用戶的
- 4. 選擇mysqli中的所有記錄
- 5. 在SQL查詢中選擇除了最大記錄以外的所有記錄
- 6. 挑選最早的日期記錄
- 7. MySQL選擇所有記錄
- 8. 選擇所有記錄
- 9. 獲取MS Access中最早一個月的所有記錄
- 10. 在SQL中更新最早的記錄?
- 11. 在最後2分鐘選擇所有記錄 - MySQL的
- 12. 獲取最早的記錄
- 13. 選擇記錄中只有特定值的所有行
- 14. 將選擇總是與第一(最早)記錄在表
- 15. 選擇尚未在記錄的所有記錄
- 16. IN查詢選擇的所有記錄
- 17. 選擇最近的記錄
- 18. 選擇類型的所有記錄 'X' 是最高的 '版本'
- 19. 從Kendo Grid中選擇所有記錄
- 20. 從Cassandra中選擇所有記錄
- 21. 在MySQL條款選擇所有記錄
- 22. 選擇最早的日期
- 23. 選擇與所有給定記錄有關係的記錄
- 24. MYSQL選擇距離給定日期最近但最早的最舊記錄
- 25. 選擇所有最新的記錄不同
- 26. SQL - 選擇所有最新的唯一記錄
- 27. 選擇所有記錄的最佳方法
- 28. MYSQL選擇所有記錄與最近的日期
- 29. PostgreSQL:如果存在條件選擇所有行,否則忽略條件並選擇最早的行
- 30. SQLite的選擇所有的記錄進行計數大於1
完美的作品,謝謝M.Ali,不知道爲什麼有人給你一個負面的... – Vlad11
不用擔心,很高興它有幫助,我不擔心倒票,有一些小丑放鬆在那裏:) –