SQLite 如何按指定列筛选同一主体存在不同取值的关联记录?
SQLite 筛选接种过多种不同类型疫苗的人员实现方案
核心筛选逻辑:按人员唯一标识NHI_id分组,统计对应人员去重后的疫苗种类数量,仅保留数量大于1的主体,即可排除“同一种疫苗接种多剂次”的情况。
返回符合条件人员的所有接种明细
需要展示每条接种记录的话,可使用CTE封装原有查询结果后筛选:
WITH all_vac_records AS ( SELECT NHI_id, fname, lname, vaccine_name, vac_date FROM Patients NATURAL JOIN Vaccinations NATURAL JOIN Vaccines ) SELECT * FROM all_vac_records WHERE NHI_id IN ( SELECT NHI_id FROM all_vac_records GROUP BY NHI_id HAVING COUNT(DISTINCT vaccine_name) > 1 )
运行后将仅返回Clayton Marsh的两条不同疫苗接种记录。
仅返回符合条件的人员基本信息
无需展示接种明细时,直接对原有查询结果分组筛选即可:
SELECT NHI_id, fname, lname FROM Patients NATURAL JOIN Vaccinations NATURAL JOIN Vaccines GROUP BY NHI_id, fname, lname HAVING COUNT(DISTINCT vaccine_name) > 1
注意事项
- 分组依据必须使用
NHI_id而非姓名,避免同名人员的统计错误 COUNT(DISTINCT vaccine_name)会自动对同人员的疫苗种类去重,接种2剂同类型疫苗的人员(如示例中的Dillon Richards)统计值为1,不会被纳入结果,符合“一种以上类型疫苗”的筛选要求- 示例数据中Harrison Dorsey的接种日期
021-04-15为录入笔误,若需对日期做格式校验或计算,可先修正为2021-04-15
内容的提问来源于stack exchange,提问作者vtk91
相关产品推荐
相关产品推荐

