【发布时间】:2019-02-24 00:50:28
【问题描述】:
您能帮我解决以下问题吗?
我正在尝试计算患者在医院的轮班次数。轮班时间从7:00 AM 到6:59 PM 和7:00 PM 到6.59 AM。
如果患者在轮班开始后入住某个地点,我们会在总计算中忽略该轮班。
这是示例数据以及最终结果的样子:
DECLARE @T AS TABLE
(
ID INT,
LOCATION VARCHAR(10),
Date_entered DATETIME,
date_left datetime
);
DECLARE @endresult AS TABLE
(
ID INT,
LOCATION VARCHAR(10),
Date_entered DATETIME,
date_left datetime,
Total_shifts int
)
insert into @T VALUES
(1,'AB','01/01/2019 07:10','01/01/2019 20:30'),
(2,'CD','01/01/2019 20:30','01/04/2019 02:30'),
(3,'EF','01/04/2019 02:30','01/07/2019 19:30'),
(4,'GH','01/07/2019 19:30','01/08/2019 13:30')
insert into @endresult VALUES
(1,'AB','01/01/2019 07:10','01/01/2019 20:30',1),
(2,'CD','01/01/2019 20:30','01/04/2019 02:30',4),
(3,'EF','01/04/2019 02:30','01/07/2019 19:30',8),
(4,'GH','01/07/2019 19:30','01/08/2019 13:30',1)
SELECT * FROM @t
select * from @endresult
我尝试使用递归 CTE,但查询花费了太多时间才能完成。有什么简单的计算时间的方法吗?
【问题讨论】:
标签: sql tsql sql-server-2012