SQL 服务器 : Get record with date closest to given date

标签 sql sql-server date

我有一张 table dbo.studiesdatetime 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/

相关文章:

mysql - 获取一个整数并将其转换为日期 - mysql

MySQL 如何对一系列时间戳的行求和?

sql-server - FreeTDS 在 Mac 上连接到 SQL Server 时出现问题(来自服务器的意外 EOF)

MySQL:如何选择本周的记录?

sql - 具有不同行的列的计数

sql - 将 Hive 查询推送到数据库级别

c# - 如何使用 C# 通过 html 表单将数据库值与输入进行比较

c# - 使用 CancellationToken 取消 SQL Server 查询

java - 是否有一个库函数可以为我提供变量中的当前日期并查找自给定日期以来经过的天数

ruby - 匹配 mm/dd/yyyy hh :mm:ss AM or PM 的正则表达式