sql-server - 用于计算每日人口普查的 SQL Server 查询

标签 sql-server

我在查询填充医院单位的每日人口普查(当前住院患者的数量)时遇到问题。 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 和 discharge_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/

相关文章:

sql - 消息 8623 :The query processor ran out of internal resources and could not produce a query plan

c# - 使用 md5 将密码保存为二进制文件并将其与数据库进行比较

sql - 查询的奇怪行为

mysql - SQL连接4表

sql-server - CASE(包含)而不是 equal 语句

sql-server - 如何在linux ubuntu 14.04上远程访问MS SQL Server

sql-server - 为什么空记录集上的 SUM(...) 返回 NULL 而不是 0?

php - 为什么 SQL Server 选择查询截断 varchar 字符串?

sql - 如何在 UPDATE 语句上创建一个循环,该循环一直工作到没有行可供更新为止?

sql-server - 尝试加快 SQL 查询速度