0

我有一个类似这样的 SQL 表:

Value   StartDate   EndDate

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

我正在使用 SQL Server 2012。

4

3 回答 3

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)
于 2013-02-15T11:39:28.597 回答
2

您应该能够使用DateDiff()类似于此:

select value, startdate, enddate
from yourtable
where datediff(ss, startdate, enddate) = (select min(datediff(ss, startdate, enddate))
                                          from yourtable)

请参阅带有演示的 SQL Fiddle

于 2013-02-15T11:37:22.370 回答
2
SELECT TOP 1 Value
FROM YourTable
ORDER BY DATEDIFF(ms, StartDate, EndDate)

请注意,如果有多个具有相同的最小差异的值,这里没有关于选择哪个值的规范。

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

于 2013-02-15T11:37:41.160 回答