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

SQL中Rank函数返回并列第一记录时,如何配置自定义决胜条件?

解决方案:优化排名逻辑添加决胜规则

当然可以用SQL实现你的需求,只需要调整窗口函数的排序规则,把你的决胜条件加到排名逻辑里就行,而且建议改用row_number()来确保每个分组只返回一条最终记录。

修改后的完整SQL代码

with 
Stays as (
select
    [Site],
    Reservation,
    Arrival,
    Departure,
    Category,
    count(*) as [Count],
    -- 提取该分组下最早的创建日期,用于决胜判断
    min(CreateDate) as EarliestCreateDate,
    row_number() over (
        partition by [Site], Reservation
        -- 排序优先级:先按类别出现次数降序,再优先Owner,最后取创建最早的
        order by count(*) desc,
                 case when Category = 'Owner' then 0 else 1 end asc,
                 min(CreateDate) asc
        ) RankNum
from #Reservations
group by
    [Site],
    Reservation,
    Arrival,
    Departure,
    Category
)

select [Site], Reservation, Arrival, Departure, Category, [Count]
from Stays
where RankNum = 1

关键调整说明

  • 替换rank()为row_number():原rank()会给排序条件相同的记录分配相同排名,导致出现多个RankNum=1的情况;row_number()能确保每个[Site], Reservation分组下只会生成唯一的排名1记录。
  • 分层排序逻辑:
    1. 第一优先级:保留原逻辑,按Category的出现次数count(*)降序排列;
    2. 第二优先级:用case表达式标记Owner类别(给Owner赋值0,其他类别赋值1),升序排序时Owner会被优先选中;
    3. 第三优先级:取每个分组内最早的创建日期升序排列,解决非Owner类别之间的平局问题。
  • 注意创建日期字段:如果你的数据集里创建日期字段不是CreateDate,把代码里的CreateDate替换成实际字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:43:31