我有一张 table dbo.studies
与 datetime
column studydate
我想使用 datetime
查询数据库变量 givendate
找到最接近 datetime
的记录在 column studydate
使用:
SELECT TOP 1 *
FROM studies
WHERE studies.studydate < givendate
ORDER BY studies.studydate DESC
将生成较少且最接近 givendate
的记录, 但我需要记录最接近 givendate
, 不管是少还是多然后 studydate
关于如何找到它的任何想法?
最佳答案
一种方法是:
SELECT TOP 1 s.*
FROM studies s
ORDER BY ABS(DATEDIFF(day, s.studydate, @givendate));
这使用 DATEDIFF()
来获取最近的日期。请注意,这是使用 day
作为区别。如果您的“日期”有时间部分,您可能需要不同的日期部分。
请注意,这不会利用索引。一个更快的方法(如果你有索引)有点复杂:
SELECT TOP (1) s.*
FROM ((SELECT TOP 1 s.*
FROM studies s
WHERE s.studydate <= @givendate
ORDER BY s.studydate DESC
) UNION ALL
(SELECT TOP 1 s.*
FROM studies s
WHERE s.studydate > @givendate
ORDER BY s.studydate ASC
)
) s
ORDER BY DATEDIFF(day, s.studydate, @givendate));
虽然这更复杂,但每个子查询都可以使用 studydate
上的索引。最后的排序将只有两行,所以它应该非常快。
关于SQL 服务器 : Get record with date closest to given date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52854028/