获取较小间隔的值

时间:2013-02-15 11:31:42

标签: sql sql-server

我有一个类似于此的SQL表:

Value   StartDate   EndDate

我需要获取StartDate和EndDate之间的间隔是整个表中最小值的值。如何在WHERE子句中表达它?

我正在使用SQL Server 2012。

3 个答案:

答案 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)

请参阅SQL Fiddle with Demo

答案 2 :(得分:2)

SELECT TOP 1 Value
FROM YourTable
ORDER BY DATEDIFF(ms, StartDate, EndDate)

请注意,如果有多个值具有相同的最小差异,则此处没有指定选择哪个值。

但是,如果表中的行数较多,则DATEDIFF可能不太适合性能。如果这是一种常见的查询类型,我会考虑将差异存储为表中的另一列,然后将其用于ORDER BY。