我面临以下问题:在一个 SQL 表中,我存储了有关人员、日期和疾病的信息。
CREATE TABLE Diseases (person varchar(80), time date, disease varchar(80))
INSERT INTO Diseases (person, time, disease) VALUES ('Harry', '2018-03-06', 'A30')
INSERT INTO Diseases (person, time, disease) VALUES ('Harry', '2017-04-06', 'C27')
INSERT INTO Diseases (person, time, disease) VALUES ('Harry', '2016-08-12', 'Z07')
INSERT INTO Diseases (person, time, disease) VALUES ('Harry', '2016-08-12', 'C27')
INSERT INTO Diseases (person, time, disease) VALUES ('Ruth', '2018-08-12', 'B02')
INSERT INTO Diseases (person, time, disease) VALUES ('Ruth', '2018-08-12', 'C02')
现在我想将每个人的疾病代码汇总到一个变量中:
SELECT Diseases.person,
STRING_AGG(Diseases.disease, ',') AS Diags,
Diseases.time
FROM Diseases
GROUP BY Diseases.person, Diseases.time
我如何设法仅汇总在当前病例之前和同一日期识别的那些疾病(例如,Harry 应该在 2017 年病例的行中有 Z07 和 C27)?
我想获得一个包含名称、日期和包含汇总疾病列表的变量的表格。我如何管理只包括疾病的不同价值?
我尝试了以下但它不起作用:
SELECT
today.person,
today.time,
today.disease,
STRING_AGG(DISTINCT past.DISEASE, ',') AS disease_history
FROM diseases today
LEFT JOIN diseases past
ON past.person = today.person AND past.time <= today.time
GROUP BY today.person, today.time, today.disease