SQL 最近 6 个月的访问量

SQL last 6 months visits

报告的目的:识别在过去 6 个月内没有洗牙的患者

编写 sql 脚本的最佳方法是什么?

患者table

patient_id patient_name
11 杰森·斯特朗
22 瑞恩·史密斯
33 凯西锤

访问次数table

v_id patient_id reason_visit date_of_visit
1 11 医疗 2021 年 1 月 1 日
2 22 洗牙 11/10/2020
3 22 每年 2021 年 1 月 1 日
4 11 洗牙 5/10/2021
5 11 每年 2021 年 5 月 1 日

预计

patient_id patient_name
22 瑞恩·史密斯
33 凯西锤

凯西在名单上,因为她不在访问中table,这意味着她从未接受过我们办公室的清洁。

Ryan Smith 在名单上,因为是时候进行清洁了。

我也在想,如果患者在过去 6 个月内没有预约,但有一个未来的洗牙预约怎么办?我想排除那个。

在 postgre 中sql:

select * from Patients p
where not exists (
    select 1 from Visits v
    where v.patient_id = p.patient_id
    and reason_visit = 'dental cleaning'
    and date_of_visit < now() - interval '6 month'
)

在 sql 服务器中将 now() - interval '6 month' 替换为 dateadd(month, -6,getdate())

在 mysql date_add(now(), interval -6 month)