首页 > 解决方案 > 扩展多个日期的 SQL 查询

问题描述

我有一个包含__DATE__宏的 SQL 查询。Python 脚本将这个宏替换为当前日期,然后执行该语句,从而提供一天的数据。

  1. 对于选择的第一个项目,我想使用tblLabTestResult.CollectionDate而不是__DATE__.
  2. 我想包括前 7 天,而不仅仅是当天。
  3. 所需的输出类似于:
    Date,Result,Total
    2021-08-28,Detected,5
    2021-08-28,Not Detected,9
    2021-08-29,Detected,23
    2021-08-29,Not Detected,6
    2021-08-30,Detected,88
    2021-08-30,Not Detected,26

当前查询:

    SELECT
        '__DATE__' as Date,
        tblLabTestResult.Result as Result,
        Count(tblLabTestResult.Result) as Total
    FROM
        PncRegDb.dbo.tblLabTestResult as tblLabTestResult
    WHERE
        tblLabTestResult.TestName like '%cov%'
        AND tblLabTestResult.TestName not like '%aoe%'
        AND tblLabTestResult.TestName not like '%antibody%'
        AND tblLabTestResult.CollectionDate >= '__DATE__'
        AND tblLabTestResult.CollectionDate <= '__DATE__ 11:59:59 PM'
    GROUP BY
        tblLabTestResult.Result;

如何更改我的 SQL 查询以适应这些要求?我在用MS SQL Server.

标签: sqlsql-server

解决方案


您可以使用 DATEADD() 函数获取 7 天前的日期,并使用 date-7days 和 date 之间的所有日期。我在下面的查询中更新了 where 条件:

SELECT
    '__DATE__' as Date,
    tblLabTestResult.Result as Result,
    Count(tblLabTestResult.Result) as Total
FROM
    PncRegDb.dbo.tblLabTestResult as tblLabTestResult
WHERE
    tblLabTestResult.TestName like '%cov%'
    AND tblLabTestResult.TestName not like '%aoe%'
    AND tblLabTestResult.TestName not like '%antibody%'
    AND tblLabTestResult.CollectionDate between DATEADD(day, -7, '__DATE__') and '__DATE__ 11:59:59 PM'
GROUP BY
    tblLabTestResult.Result;

推荐阅读