如何忽略数据库查询中重复的顺序值

时间:2012-02-28 23:18:19

标签: sql database postgresql

我有一个庞大的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排序 由于我需要在图表中显示此信息,因此获取第一个和最后一个匹配很重要,可以忽略介于两者之间的值。

1 个答案:

答案 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()表达式具有确定性。