在我的情况下,我想从下表中提取开始日期和停止日期,因为您可以看到我只有1个日期列,其中包含开始/更改/停止日期,这取决于ACTION列:
01 - Start (New drug start)
02 - Change (Change of dose)
03 - Stop ( Drug Stopped)
棘手的一点是当Action = 02剂量改变时,更改日期应该成为当前剂量的开始日期和前一剂量的停止日期。
我真的很困惑,
CREATE TABLE TEST(ID VARCHAR(10), [TherapyAction] INT, [Drug] INT, [Dose] FLOAT, [TherapyDate] DATETIME)
INSERT INTO [dbo].[TEST] VALUES ('XXX' ,1, 1, 60, '01/09/2009 '),
('57A' ,3, 1, 60, '09/07/2011'),
('57A' ,1, 3, 5, '25/06/2010'),
('57A' ,3, 3, 5, '09/07/2011' ),
('57A' ,1, 4, 187.5, '19/02/2010'),
('57A' ,2, 4, 250, '01/06/2010' ),
('57A' ,3, 4, 250, '09/07/2011' ),
('A5B' ,1, 1, 12.5, '26/01/2007' ),
('A5B' ,2, 1, 25, '06/02/2007' ),
('A5B' ,2, 1, 225, '20/08/2009'),
('A5B' ,1, 4, 62.5, '04/07/2006'),
('A5B' ,2, 4, 125, '12/07/2006'),
('A5B' ,2, 4, 250, '01/05/2008'),
('A5B' ,1, 7, 7.5, '11/09/2006'),
('A5B' ,3, 7, 7.5, '26/01/2007'),
('A5B' ,1, 7, 9, '09/04/2010'),
('A5B', 3, 7, 9, '19/07/2010')
SELECT * FROM [dbo].[TEST]
非常感谢任何帮助
答案 0 :(得分:1)
set dateformat dmy
declare @test TABLE (ID VARCHAR(10), [TherapyAction] INT,
[Drug] INT, [Dose] FLOAT,
[TherapyDate] DATETIME)
INSERT INTO @test VALUES ('XXX' ,1, 1, 60, '01/09/2009 '),
('57A' ,3, 1, 60, '09/07/2011'),
('57A' ,1, 3, 5, '25/06/2010'),
('57A' ,3, 3, 5, '09/07/2011' ),
('57A' ,1, 4, 187.5, '19/02/2010'),
('57A' ,2, 4, 250, '01/06/2010' ),
('57A' ,3, 4, 250, '09/07/2011' ),
('A5B' ,1, 1, 12.5, '26/01/2007' ),
('A5B' ,2, 1, 25, '06/02/2007' ),
('A5B' ,2, 1, 225, '20/08/2009'),
('A5B' ,1, 4, 62.5, '04/07/2006'),
('A5B' ,2, 4, 125, '12/07/2006'),
('A5B' ,2, 4, 250, '01/05/2008'),
('A5B' ,1, 7, 7.5, '11/09/2006'),
('A5B' ,3, 7, 7.5, '26/01/2007'),
('A5B' ,1, 7, 9, '09/04/2010'),
('A5B', 3, 7, 9, '19/07/2010');
SELECT t.ID, t.Drug, t.Dose,t.TherapyDate as start_date,
(select top 1 t2.TherapyDate
from @test t2
where t2.ID=t.ID and t2.Drug=t.Drug
and ((t2.Dose<>t.Dose and t2.TherapyAction=2) or t2.TherapyAction=3)
and t2.TherapyDate > t.TherapyDate
order by t2.TherapyDate) as stop_date
FROM @test t where t.[TherapyAction] in (1,2)
但是,如果有几个时期服用同一种药物治疗一名患者,您应该检查一下
答案 1 :(得分:0)
我认为你会发现拥有StartDate,EndDate和Action的行更容易。如果EndDate为NULL,则操作仍为“实时”。
您可以轻松编写查询以显示与给定日期相关的操作(或剂量),或提取给定主题的操作历史。
(这取决于您能否改变数据库的架构)