如何选择21天(或更长时间)前的记录?(sqlite)



我正试图选择已经接受过一剂Comirnaty的患者,并将接受下一剂(vac_date为21天前或更长时间(。

以下问题让我了解了所有接受过一剂Comirnaty的人:

SELECT NHI_id, fname, lname, vac_date
FROM Patients
NATURAL JOIN Vaccinations
NATURAL JOIN Vaccines
WHERE vaccine_name="Comirnaty"
GROUP BY NHI_id, fname, lname
HAVING count(vac_date)=1
lnamevac_date2021-04-15利文斯顿2021-04-02
NHI_idfname
16120419科莱特凯里
16120427Aretha
16120428克莱顿马什2021-03-31
16120433泰勒巴克利2021-03-20

在最新版本的SQLite上,我会在这里使用COUNT()分析函数:

WITH cte AS (
SELECT NHI_id, fname, lname, vac_date,
COUNT(*) OVER (PARTITION BY NHI_id, fname, lname) cnt
FROM Patients
NATURAL JOIN Vaccinations
NATURAL JOIN Vaccines
WHERE vaccine_name = 'Comirnaty'
)
SELECT NHI_id, fname, lname, vac_date
FROM cte
WHERE cnt = 1 AND vac_date < date('now', '-21 days');

上述CTE使用COUNT为每个人生成疫苗接种记录的数量计数。然后,在下面的查询中,我们将限制为只出现一次Comirnaty疫苗的人,以及自当前日期起21天或更长时间的单一疫苗接种日期。

最新更新