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

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

问题描述:

我有一个巨大的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" 
 

编辑
我选择由[值,created_at]的各行,通过created_at排序。
由于我需要在图表中显示此信息,因此获取第一个和最后一个出现位置非常重要,它们之间的值可以忽略。

+0

序列是以行还是列的形式返回的? – ChristopheD 2012-02-28 23:21:49

+0

是否有一个原因,只是得到不同的值不会工作? – 2012-02-28 23:22:17

+0

@ChristopheD行,每一行由[值,created_at] – marcosbeirigo 2012-02-28 23:23:24

您可以使用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列表中添加这样的滞后()和铅()表达式是确定性的。

+2

您有两个太多的nots。 – 2012-02-29 02:40:37

+1

Aargh。它应该是从不同,而不是不从。我在SQL Server上测试过它,它没有这个功能......我会修复它。 – 2012-02-29 02:41:23

+0

这很好,谢谢! – marcosbeirigo 2012-02-29 17:29:07