You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询如何优先取居民首位责任人 无则取首个紧急联系人

实现思路

核心逻辑是给不同类型的联系人设置优先级,再给每个居民的所有符合要求的联系人按规则排序,取排名第一的即可:

  • 先给联系人类型分配优先级:Responsible Party优先级最高(赋值1),普通紧急联系人次之(赋值2),其他类型无需纳入的可以直接过滤
  • 用窗口函数ROW_NUMBER()按居民分组,组内先按优先级升序排序,同优先级再按你判定“第一条”的规则排序(比如录入时间升序、主键ID升序)
  • 最后过滤出每组排序为1的记录,就能实现每个居民仅返回1条符合要求的联系人数据
示例SQL代码

假设你的存储联系人的表名为resident_contacts,用主键ID从小到大判断录入先后(即ID小的为第一条),实现代码如下:

WITH ranked_contacts AS (
    SELECT 
        "Resident Name",
        "Contact Name",
        "Phone",
        "Contact Type",
        ROW_NUMBER() OVER (
            PARTITION BY "Resident Name"
            ORDER BY 
                -- 按类型优先级排序
                CASE "Contact Type"
                    WHEN 'Responsible Party' THEN 1
                    WHEN '紧急联系人' THEN 2
                    ELSE 99
                END ASC,
                -- 同优先级下按录入先后排序,可替换为你的录入时间字段,比如 create_time ASC
                id ASC
        ) AS contact_rank
    FROM resident_contacts
    -- 仅保留需要的两类联系人,不需要授权委托人可直接过滤
    WHERE "Contact Type" IN ('Responsible Party', '紧急联系人')
)
SELECT 
    "Resident Name",
    "Contact Name",
    "Phone",
    "Contact Type"
FROM ranked_contacts
WHERE contact_rank = 1;
结果验证

针对你给出的示例数据,Jane Doe的两个联系人都属于Responsible Party,优先级均为1,按ID排序后取第一条John Smith的记录,不会返回第二条,完全符合需求。
如果某居民没有登记Responsible Party,排序时会自动匹配优先级为2的普通紧急联系人,取该类型下的第一条记录返回。


内容的提问来源于stack exchange,提问作者Jodi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:03