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
我有一个病人有入院日期和出院日期。如何计算时间范围内午夜出现了多少次?
因此使用下面的 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