2016-04-05 5 views
2

こんにちはみんなに私がイベントの列と列のための列を持つpostgresのテーブルを持っています+。すべてのイベントが複数のシーケンスを持つ場合があります。例:見つける分は1 Postgresの

Event | Sequence 
a  | 1 
a  | 4 
a  | 5 
b  | 1 
b  | 2 

イベントで選択されたmin(シーケンス)グループが私に最小シーケンスを与えることがわかりました。どのように私は最小値の後に非常に次の値を取得するのですか?私はそれが理にかなったことを願う前もって感謝します。 私はPostgresの9.3を使用しています。

答えて

2

あなたは、イベントごとに二番目に低いシーケンス番号を取得するためにSequenceによってEventと順序によってROW_NUMBER()パーティショニングを使用することができます。

SELECT Event, Sequence 
FROM (
    SELECT Event, Sequence, 
     ROW_NUMBER() OVER (PARTITION BY Event ORDER BY Sequence) rn 
    FROM Table1 
) z 
WHERE rn = 2; 

An SQLfiddle to test with

0

EDITもう少し複雑、しかし、あなたがROW_NUMBER()に依存しないクエリが必要な場合は、自己結合各イベントのために最低限の配列と行を除外すると、副問合せを使用します。

SELECT outer_query.Event, MIN(outer_query.Sequence) AS SecondMinSeq 
FROM Table1 as outer_query 
INNER JOIN (
    SELECT Table1.Event, MIN(Sequence) AS MinSeq 
    FROM Table1 
    GROUP BY Table1.Event 
) AS min_sequences 
ON outer_query.Event = min_sequences.Event AND outer_query.Sequence <> min_sequences.MinSeq 
GROUP BY outer_query.Event 

SQLフィドル:http://sqlfiddle.com/#!15/4438b/7

+0

何だったシーケンス1,3,7,11などは、その後どのように私はより多くの理にかなって二番目に最小sequence..Hopeを選択しない場合のシーケンスはorder..for例にない場合.. – Ang

関連する問題