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

如何实现按lprReportId去重并优先选择lprOwner为'ABCD'的行?

解决方案

当然可以实现这个需求!我们可以利用SQL的窗口函数来精准控制每组数据的筛选逻辑,完美匹配你的要求:

核心思路

  1. 按lprReportId对数据进行分组,确保同一报告ID的记录放在一起
  2. 给每组内的记录设置优先级:优先保留lprOwner = 'ABCD'的行,其他行优先级靠后
  3. 从每组中只取优先级最高的那一行

完整查询语句

SELECT lprArchived, lprReportId, lprOwner
FROM (
    SELECT 
        lprArchived, 
        lprReportId, 
        lprOwner,
        -- 给每组记录编号,ABCD的行排第一
        ROW_NUMBER() OVER (
            PARTITION BY lprReportId 
            ORDER BY CASE WHEN lprOwner = 'ABCD' THEN 1 ELSE 2 END ASC
        ) AS row_num
    FROM ReportIndex 
    WHERE lprArchived = 1
) ranked
WHERE row_num = 1;

代码解释

  • PARTITION BY lprReportId:将查询结果按报告ID分组,保证同一lprReportId的记录在同一组内处理
  • ORDER BY CASE WHEN lprOwner = 'ABCD' THEN 1 ELSE 2 END ASC:通过CASE表达式给lprOwner为'ABCD'的行赋予更高的优先级(值越小越靠前),确保它在每组中排第一
  • ROW_NUMBER():为每组内的记录按优先级顺序分配唯一编号,第一行编号为1
  • 外层查询筛选row_num = 1的记录,正好保留每组中优先级最高的那一行

额外说明

因为你提到同一lprReportId下最多仅有一行lprOwner = 'ABCD'的记录,所以这个逻辑完全适配你的场景。即使出现极端情况(比如有多条ABCD的记录),ROW_NUMBER()也只会保留其中一行,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:25