我在填充医院单位的每日人口普查(当前住院人数)时遇到问题。 This previous post 是我找到查询的地方。

SELECT
    [date], COUNT (DISTINCT
                       CASE WHEN admit_date <= [date] AND discharge_date >= [date] THEN id END)) AS census
FROM
    dbo.patients, dbo.census
GROUP BY
    [date]
ORDER BY
    [date]

有2张表:
  • dbo.patients 带有 id、admit_date 和放电日期列
  • dbo.census 有一个包含自 2017 年以来每个日期的日期列,以及一个空白的人口普查列

  • 查询填充人口普查列,但人口普查计数在日期结束时减少到比它应该的更小的数字。例如,discharge_date 有 65 个空值,因此今天日期的人口普查计数应该为 65,但查询生成的计数为 8。

    最佳答案

    可能需要考虑 NULL 出院日期

    SELECT [date], COUNT (DISTINCT
    CASE WHEN admit_date <= [date] AND COALESCE(discharge_date, GETDATE()) >= [date] THEN id END))
    AS census
    
    FROM dbo.patients
    CROSS JOIN dbo.census
    
    GROUP BY [date]
    ORDER BY [date]
    

    也就是说,假设 [date] 是某种当前日期/时间戳。另外,根据 Sean Lange 的评论,如果您真的想要 CROSS JOIN,那么您应该在查询中指定它。

    关于sql-server - 用于计算每日人口普查的 SQL Server 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59272448/

    10-13 23:48