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

PostgreSQL中如何在SELECT查询中跳过连续重复列值?

在PostgreSQL中筛选非连续重复的trade记录

要实现只保留每组连续相同trade值的第一条记录,你可以用PostgreSQL的窗口函数LAG()来对比当前行与上一行的trade值,具体SQL语句如下:

SELECT id, trade
FROM (
    SELECT 
        id, 
        trade,
        -- 获取上一行的trade值,按id排序保证顺序正确
        LAG(trade) OVER (ORDER BY id) AS prev_trade
    FROM decisions
) AS subquery
-- 筛选第一行,或者当前trade与上一行不同的记录
WHERE prev_trade IS NULL OR trade != prev_trade;

执行这条查询后,就能得到你期望的结果:

idtrade
1buy
4sell
6buy

原理说明:

  • LAG(trade) OVER (ORDER BY id)会根据id的排序,为每一行返回它上一行的trade值,第一行没有上一行,所以prev_trade为NULL。
  • 外层查询只保留prev_trade为NULL(也就是第一组的第一条)或者当前trade和上一行不同的记录,这样就自动跳过了连续重复的后续行。

内容的提问来源于stack exchange,提问作者vitaly-t

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:22:05