2012-02-28 64 views
2

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

回答

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列表中添加這樣的滯後()和鉛()表達式是確定性的。

+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