由于您的日期列不在 YYYY-MM-DD 中,这是几个 sqlite 日期函数使用的默认值,substr 函数用于将您的日期转换为这种格式。然后使用JulianDay 将您的日期转换为整数值,这将简化 7 天的比较。 MIN 窗口函数用于确定该患者的第一次医院就诊日期。演示小提琴和示例显示了用于在最终查询之前转换数据和结果的查询,最终查询根据您的要求进行过滤,即< 7 days。通过这种使用窗口函数的方法,如果需要,您还可以检索 visit_date 和自首次访问日期以来的天数。
您可以阅读有关 sqlite 日期函数的更多信息here。
查询 #1
SELECT
patient_id,
visit_date,
JulianDay(visit_date) -
MIN(JulianDay(visit_date)) OVER (PARTITION BY patient_id)
as num_of_days_since_first_visit
FROM
(
SELECT
*,
(
substr(date_visit,7) || '-' ||
substr(date_visit,0,3) || '-' ||
substr(date_visit,4,2)
) as visit_date
FROM
visits
) v;
| patient_id |
visit_date |
num_of_days_since_first_visit |
| A123B29133 |
2011-07-12 |
0 |
| A123B29133 |
2011-07-14 |
2 |
| A123B29133 |
2011-07-20 |
8 |
| A123B29134 |
2016-12-05 |
0 |
查询 #2
以下是您想要的查询,它使用前一个查询作为 CTE,并对少于 7 天的访问应用过滤器。 num_of_days <> 0 用于删除第一个日期也是记录日期的条目。
WITH num_of_days_since_first_visit AS (
SELECT
patient_id,
visit_date,
JulianDay(visit_date) - MIN(JulianDay(visit_date)) OVER (PARTITION BY patient_id) num_of_days
FROM
(
SELECT
*,
(
substr(date_visit,7) || '-' ||
substr(date_visit,0,3) || '-' ||
substr(date_visit,4,2)
) as visit_date
FROM
visits
) v
)
SELECT DISTINCT
patient_id
FROM
num_of_days_since_first_visit
WHERE
num_of_days <> 0 AND num_of_days < 7;
View on DB Fiddle
让我知道这是否适合你。