You need to enable JavaScript to run this app. SQLite 如何按指定列筛选同一主体存在不同取值的关联记录?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 00:15:00