我有一个庞大的postgres数据库,需要不断查询。我正在查询的数据集有许多重复的顺序值。例如:
3,4,5,1,1,1,1,1,1,1 ... 1,1,1,1,1,8
如果重复值序列只返回该序列的第一个和最后一个记录,是否可能?例如:
If the data is:
3,4,5,1,1,1,1,1,1,1 ... 1,1,1,1,1,8
The query result should be:
3,4,5,1*,1**,8
* first occurrence of "1"
** last occurrence of "1"
修改:
我选择的行由[value,created_at]组成,由created_at排序
由于我需要在图表中显示此信息,因此获取第一个和最后一个匹配很重要,可以忽略介于两者之间的值。
答案 0 :(得分:3)
您可以使用LAG和LEAD轻松完成此操作:
with T(n,created_at,bef,aft) as (
select
n,
created_at,
lag(n,1) over (order by created_at),
lead(n,1) over (order by created_at)
from your_table
)
select
n,
created_at
from T
where bef is distinct from n
or aft is distinct from n;
如果created_at的值不唯一,则应该在ORDER BY列表中添加一个区别列,以便lag()和lead()表达式具有确定性。