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

如何遍历表中去重日期并提取每个日期下gap值最高的2条记录

问题原因分析
  • 你写的DO匿名代码块默认返回void类型,本身不支持直接返回查询结果,块内执行SELECT语句必须指定存储结果的变量,所以会触发query has no destination for result data报错
  • 你尝试加RETURN也没用,因为返回void的代码块不允许RETURN带参数,要靠循环实现的话还得额外建临时表存结果,非常麻烦,这个需求完全不需要用循环
最优解决方案(无循环,性能更高)

用PostgreSQL的窗口函数ROW_NUMBER()就能直接实现分组取TOP N的需求,SQL如下:

SELECT id, date, gap
FROM (
    SELECT 
        *,
        -- 按日期分组,组内按gap倒序排序编行号
        ROW_NUMBER() OVER (PARTITION BY date ORDER BY gap DESC) AS rn
    FROM 你的实际表名 -- 注意替换成你自己的表名,不要用table关键字当表名
) t
WHERE rn <= 2
ORDER BY date, gap;

代码说明

  • PARTITION BY date 会把所有数据按日期字段分组,不同日期的排序互不影响
  • ORDER BY gap DESC 指定每个分组内的排序规则,gap越大行号越靠前
  • 外层筛选rn <= 2 就可以拿到每个日期下gap最大的前2条数据,完全符合你要的输出结果

扩展说明

如果遇到同一个日期下有多个相同gap值的情况,比如你要把并列第二的所有数据都返回,把ROW_NUMBER()换成RANK()或者DENSE_RANK()即可,根据你的实际业务需求选择就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:00:05