我有以下三个简单的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