SQL 服务器 - 计算午夜发生次数

SQL Server - Count Midnight Occurrence

我有一个病人有入院日期和出院日期。如何计算时间范围内午夜出现了多少次?

因此使用下面的 table,患者 1 将在 1/31 24:00:00、2/1 24:00:00 和 2/2 24:00:00 入院。关于如何 return 这三个事件有什么想法吗?

create table temp
(   PatientID varchar(12),
    AdmitDate datetime,
    DischargeDate datetime
)

insert into temp values ('Patient1','1/30/2020 13:23:44', '2/2/2020 15:12:52')

这就是datediff()的作用:

datediff(day, admitdate, dischargedate)

虽然简单的 datediff 计算在大多数情况下都有效,但也有一些极端情况。在这example from NHSN, you must count an extra day. For context, check out the PDF。因此,如果一名患者在午夜入院,而该时间正是组织计算患者天数的选定时间,则该患者必须被计算在内。当然,PatientY 只进来了一分钟,而不是一整天。但总的来说,在长期 运行 中,我想它是平均的。

IF object_id('tempdb.dbo.#Temp') IS NOT NULL
    DROP TABLE #Temp

CREATE TABLE #Temp 
   (PatientID VARCHAR(12),
    AdmitDate DATETIME,
    DischargeDate DATETIME)

INSERT INTO #Temp
VALUES 
    ('Patient1', '1/30/2020 13:23:44', '2/2/2020 15:12:52'),
    ('Patient2', '1/1/2020 23:59', '1/3/2020 00:01'),
    ('PatientX', '1/1/2020 08:00', '1/5/2020 17:00'),
    ('PatientY', '1/1/2020 00:00', '1/5/2020 00:01') -- 5 days according to NHSN

SELECT 
    PatientID,
    DATEDIFF(DAY, AdmitDate, DischargeDate) MidnightCount,
    CASE 
        WHEN AdmitDate = CAST(AdmitDate AS DATE)
            THEN DATEDIFF(DAY, AdmitDate, DischargeDate) + 1
        ELSE DATEDIFF(DAY, AdmitDate, DischargeDate)
        END MidnightCountNHSN
FROM #Temp