我有以下三個簡單的T-SQL查詢。第一個是一個範圍邊界(DATETIME型)中得到記錄:在一系列邊界內的SQL查詢記錄以及範圍之外的最大/最小值
SELECT value, timestamp
FROM myTable
WHERE timestamp BETWEEN @startDT AND @endDT
第二個是讓最接近記錄@startDT(DATETIME型)
SELECT TOP 1
value, timestamp
FROM myTable
WHERE timestamp > @startDT
ORDER BY timestamp DESC
,最後一個是@endDT後得到的最接近記錄:
SELECT TOP 1
value, timestamp
FROM myTable
WHERE timestamp < @endDT
ORDER BY timestamp ASC
我想獲得以上三個查詢的所有記錄的一組記錄。我試圖使用UNION,但似乎UNION中的子查詢不允許ORDER BY子句。有沒有有效的方法來獲得我的結果?
. . * | * * * * * | * . . .
start end
上面的圖表只顯示了* s的記錄作爲我所需的記錄,而| ... |是界限。
順便說一下,myTable中的數據量是巨大的。我對UNION的理解並不是從UNION獲取數據的有效方法。任何有效的方式來獲取數據沒有UNION?
您確定使用'ORDER BY value,timestamp'從這些查詢中獲得了期望的結果嗎?根據你的描述,我想你只想在時間戳上訂購。否則,你會得到最接近邊界的最小值。 – 2011-06-10 20:14:29
你說得對,我只是通過時間戳來改變它。 – 2011-06-10 20:16:24
很高興看到這麼多答案滿足我的需求。 @Piotr Auguscik提到在性能方面,min/max比Order + top 1要好。是對的嗎?根據答案,我找到了「最小/最大+分組依據」的解決方案。不知道哪一個更好。請記住myTable在我的情況下包含大量的記錄。 – 2011-06-11 00:16:36