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

如何让查询仅返回具有最小PriorityId的单条记录?

如何让查询仅返回具有最小PriorityId的单条记录?

嗨,我来帮你捋清楚问题出在哪,以及怎么调整查询得到你想要的结果~

问题根源分析

你当前的查询之所以返回2,'NY'和3,'MA'两条记录,是因为子查询里的关联条件PR.AddressCd = PR2.AddressCd让它变成了按每个AddressCd分组,计算该组内的最小PriorityId。举个例子:

  • 对于AddressCd='NY',它的PriorityId是2,组内最小就是2,满足条件
  • 对于AddressCd='MA',它的PriorityId是3,组内最小就是3,也满足条件

所以最终两条记录都被筛选出来了,但你想要的是全局范围内最小PriorityId对应的那条记录,对吧?

解决方案

这里给你几种可行的调整方式:

方案1:直接获取全局最小PriorityId

把子查询改成不关联当前行的AddressCd,直接计算整个表的最小PriorityId:

select PR.PriorityId, PR.AddressCd
from DMDAddressPriority PR
join DMDAddressCity CT
on CT.AddressCd = PR.AddressCd
where PriorityId = (
    select min(PriorityId)
    from DMDAddressPriority
)

因为NJ没有对应的城市记录,JOIN后会被过滤掉,所以最终只会返回2,'NY'这条符合要求的记录。

方案2:使用窗口函数(更灵活)

如果未来可能出现多个相同最小PriorityId的记录,用ROW_NUMBER()窗口函数可以精准控制只取第一条:

select PriorityId, AddressCd
from (
    select PR.PriorityId, PR.AddressCd,
           -- 按PriorityId升序编号,最小的会被标为1
           ROW_NUMBER() over (order by PR.PriorityId asc) as rn
    from DMDAddressPriority PR
    join DMDAddressCity CT
    on CT.AddressCd = PR.AddressCd
) t
where rn = 1

方案3:用TOP 1(适合SQL Server)

如果你用的是SQL Server,直接用TOP 1加排序就能快速得到结果:

select top 1 PR.PriorityId, PR.AddressCd
from DMDAddressPriority PR
join DMDAddressCity CT
on CT.AddressCd = PR.AddressCd
order by PR.PriorityId asc

总结

核心区别就是:你原来的查询是分组取最小值,而我们需要的是全局取最小值,调整子查询逻辑或者用上面的方法就能得到你想要的单条记录啦~

备注:内容来源于stack exchange,提问作者Lil SQL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:28:03