假设我有下表,我只想返回上一行中价格!=价格的行,而只返回按时间分组的组中的行
ID : { 1 , 2 , 3 , 4 , 5 , 6 }
Time : { 09:20:00, 09:20:00, 09:20:00, 09:20:01, 09:20:02, 09:20:03 }
Price : { 100 , 100 , 101 , 102 , 102 , 103 }
由于按时间分组,返回的输出应为:
ID : { 1 , 3 , 4 , 5 , 6 }
Time : { 09:20:00, 09:20:00, 09:20:01, 09:20:02 , 09:20:03 }
Price : { 100 , 101 , 102 , 102 , 103 }
请注意,尽管输出与09:20:01的价格相同,但输出在09:20的价格中丢弃了100个价格,但在09:20:02的价格中并未舍弃102个价格,因为必须进行分组按时间。有人可以通过postgres查询帮助我吗?
答案 0 :(得分:1)
SELECT time, price
FROM mytable
WHERE price <> coalesce(
lag(price) OVER (PARTITION BY time ORDER BY id),
price - 1
)
ORDER BY time, id;
coalesce
处理每个分区中第一个元素出现的NULL值。