【问题标题】:How do I select records from 21days (or more) ago? (sqlite)如何选择 21 天(或更早)前的记录? (sqlite)
【发布时间】:2021-04-16 02:28:19
【问题描述】:

我正在尝试选择已接受一剂 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 lname vac_date
16120419 Colette Carey 2021-04-15
16120427 Aretha Livingston 2021-04-02
16120428 Clayton Marsh 2021-03-31
16120433 Taylor Buckley 2021-03-20

这个查询会选择除第二剂到期的人以外的所有人:

SELECT NHI_id, vac_date
FROM Vaccinations
WHERE date("now", "-21 days") <= vac_date
NHI_id vac_date
16120415 2021-04-10
16120419 2021-04-15
16120420 2021-04-15
16120421 2021-04-10
16120423 2021-04-01
16120424 2021-04-02
16120425 2021-04-02
16120426 2021-04-02
16120427 2021-04-02
16120428 2021-03-31
16120428 2021-04-01
16120430 2021-04-10
16120432 2021-04-15
16120434 2021-04-15
16120435 2021-04-15

所以我尝试使用 NOT IN 将第一个查询与第二个查询结合起来,认为这应该给我正在寻找的一个案例,但我认为我忽略了一些东西?

【问题讨论】:

    标签: sqlite date notin in-subquery


    【解决方案1】:

    在最新版本的 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 生成每个人的疫苗接种记录数。然后,在下面的查询中,我们将限制为只出现一次共接种疫苗的人,以及从当前日期起 21 天或更长时间的单次接种日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      相关资源
      最近更新 更多