我有一个类似于此的SQL表:
Value StartDate EndDate
我需要获取StartDate和EndDate之间的间隔是整个表中最小值的值。如何在WHERE子句中表达它?
我正在使用SQL Server 2012。
答案 0 :(得分:3)
使用此:
SELECT TOP 1 value
FROM tbl1
ORDER BY DATEDIFF(ms, StartDate, EndDate)
如果您有多行差异最小,可以使用:
SELECT TOP 1 WITH TIES value
FROM tbl1
ORDER BY DATEDIFF(ms, StartDate, EndDate)
答案 1 :(得分:2)
您应该可以使用与此类似的DateDiff()
:
select value, startdate, enddate
from yourtable
where datediff(ss, startdate, enddate) = (select min(datediff(ss, startdate, enddate))
from yourtable)
答案 2 :(得分:2)
SELECT TOP 1 Value
FROM YourTable
ORDER BY DATEDIFF(ms, StartDate, EndDate)
请注意,如果有多个值具有相同的最小差异,则此处没有指定选择哪个值。
但是,如果表中的行数较多,则DATEDIFF可能不太适合性能。如果这是一种常见的查询类型,我会考虑将差异存储为表中的另一列,然后将其用于ORDER BY。