我有一个类似这样的 SQL 表:
Value StartDate EndDate
我需要获取 StartDate 和 EndDate 之间的间隔是整个表中最小的值。如何在 WHERE 子句中表达它?
我正在使用 SQL Server 2012。
我有一个类似这样的 SQL 表:
Value StartDate EndDate
我需要获取 StartDate 和 EndDate 之间的间隔是整个表中最小的值。如何在 WHERE 子句中表达它?
我正在使用 SQL Server 2012。
用这个:
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)
您应该能够使用DateDiff()
类似于此:
select value, startdate, enddate
from yourtable
where datediff(ss, startdate, enddate) = (select min(datediff(ss, startdate, enddate))
from yourtable)
SELECT TOP 1 Value
FROM YourTable
ORDER BY DATEDIFF(ms, StartDate, EndDate)
请注意,如果有多个具有相同的最小差异的值,这里没有关于选择哪个值的规范。
但是,如果表中有大量行,则 DATEDIFF 可能对性能不利。如果这是一种常见的查询类型,我会考虑将差异存储为表中的另一列,然后将其用于 ORDER BY。