【问题标题】:Get last 90 days records (SQL)获取最近 90 天的记录 (SQL)
【发布时间】:2025-12-26 17:40:06
【问题描述】:

我有以下查询来从我的数据库中获取最近 90 天的记录。

示例数据如下:

我的查询代码:

SELECT
Email
,Country
,Date_of_Birth
,Date_Added
,Received_ProfileCompletionPromoCode
,First_Name
,Purchase_since_entry
,Exit_Date
FROM
Profile_Completion_Journey_Exit_Log
WHERE
Exit_Date >= DATEADD(d, -90, GETDATE())

但我得到的结果是 Exit_Date 是 10/11/2020。我的错误是什么?

【问题讨论】:

  • 10 月 10 日(假设这就是 2020 年 10 月 11 日的意思)在过去 90 天内。有什么问题?
  • 哦,好吧,我以为我的代码会在数据库中获取 90 天前的记录。
  • 我应该得到从今天起 90 天内的记录。那么应该是 2020 年 7 月 27 日吗?
  • 哇,你真幸运,#1 和 #2 在几秒钟内得到了完全相同的答案。这应该会让你对答案充满信心。

标签: sql sql-server datetime where-clause


【解决方案1】:

您的代码为您提供日期不超过 90 天前的记录。

如果您想要日期正好是 90 天前的记录,那么:

WHERE Exit_Date = DATEADD(day, -90, CONVERT(DATE, GETDATE())

转换为日期是重要的一步。 GETDATE() 返回当前日期和时间:我们需要截断时间部分。

这假定Exit_Datedate 数据类型。如果它有时间分量,那么:

WHERE Exit_Date >= DATEADD(day, -90, CONVERT(DATE, GETDATE())
  AND Exit_Date <  DATEADD(day, -89, CONVERT(DATE, GETDATE())

【讨论】:

    【解决方案2】:

    如果您想要 90 天前的数据,请使用:

    WHERE Exit_Date >= DATEADD(day, -90, CONVERT(DATE, GETDATE())) AND
          Exit_Date < DATEADD(day, -89, CONVERT(DATE, GETDATE()))
    

    这得到正好 90 天前的结果。

    注意转换为DATE。尽管有它的名字,GETDATE() 有一个时间组件。

    【讨论】: