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;
执行这条查询后,就能得到你期望的结果:
| id | trade |
|---|---|
| 1 | buy |
| 4 | sell |
| 6 | buy |
原理说明:
LAG(trade) OVER (ORDER BY id)会根据id的排序,为每一行返回它上一行的trade值,第一行没有上一行,所以prev_trade为NULL。- 外层查询只保留
prev_trade为NULL(也就是第一组的第一条)或者当前trade和上一行不同的记录,这样就自动跳过了连续重复的后续行。
内容的提问来源于stack exchange,提问作者vitaly-t
相关产品推荐
相关产品推荐

