我有两张table。“实验室obs”表记录了患者接受covid检测时的结果。“药物”表记录了所有患者服用的所有药物(无论是否测试)。以下是简化模式:
CREATE TABLE lab_obs (ob_day DATE,
ob VARCHAR(20),
patient_id VARCHAR(20)
);
CREATE TABLE medications (given_day DATE,
med VARCHAR(20),
patient_id VARCHAR(20)
);
INSERT INTO lab_obs VALUES ('2020-03-01', 'positive', 'p11');
INSERT INTO lab_obs VALUES ('2020-05-01', 'negative', 'p11');
INSERT INTO lab_obs VALUES ('2020-03-02', 'negative', 'p12');
INSERT INTO lab_obs VALUES ('2020-06-01', 'negative', 'p11');
INSERT INTO lab_obs VALUES ('2020-06-01', 'negative', 'p12');
INSERT INTO medications VALUES ('2020-03-05', 'covid_med_11', 'p11');
INSERT INTO medications VALUES ('2020-03-05', 'non_covid_med_12', 'p12');
INSERT INTO medications VALUES ('2020-02-05', 'non_covid_med_11', 'p11');
INSERT INTO medications VALUES ('2020-04-05', 'non_covid_med_41', 'p41');
我想写一个sql,它会给我(patient\u id,med)一个测试阳性和随后测试阴性的患者,以及在阳性测试和随后阴性测试之间的时间内服用的所有药物。基本上,查询应该给我所有的药物谁从covid恢复!!
3条答案
按热度按时间sxissh061#
我想你可以用这个。使用lag函数检查以前的记录。我在sql server中运行了它。此外,请使用代码进行观察,因为拼写可能会导致问题,例如肯定而不是肯定。
dxxyhpgq2#
使用postgresql进行了尝试(不确定您使用的是哪种rdbms)。为此,您需要窗口函数和CTE:
carvr3hs3#
这有点棘手。如果有人只有一次检测呈阳性,那么:
这适用于消极和积极-消极情景。
如果有人可以来回切换,那么我建议使用
lag()
这样地:这个
l
子查询确定某人何时第一次测试为阳性,然后使用不同的测试值确定下一个测试日期。