我正试图选择已经接受过一剂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
NHI_id | fname | lnamevac_date||
---|---|---|---|
16120419 | 科莱特 | 凯里 | 2021-04-15|
16120427 | Aretha | 利文斯顿2021-04-02||
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天或更长时间的单一疫苗接种日期。