0

私の質問に続けてHow can I take two rows for one Distinct value in postgresql?postgresqlの1つのDistinct値に対して2行をとるにはどうすればいいですか?

上記質問私は別の列から2つの値を取るという私の基本的な問題の解決策を得ました。

しかし、それに取り組んでいる間、私は新しい質問

私は私のテーブルにタイムスタンプを導入

demo_table 
id | column1 | column2 |  timestamp 
1 | 1 | 3 | 2016-09-23 00:20:20 
2 | 2 | 3 | 2016-09-24 00:20:20 
3 | 3 | 4 | 2016-09-24 00:20:20 
4 | 4 | 3 | 2016-09-25 00:20:20 
5 | 5 | 4 | 2016-09-25 00:20:20 
6 | 6 | 3 | 2016-09-27 00:20:20 
7 | 7 | 5 | 2016-09-28 00:20:20 
8 | 8 | 5 | 2016-09-28 00:20:20 
9 | 9 | 3 | 2016-09-30 00:20:20 

を発見したクエリ

select id, column1, column2 
from (
    select id, column1, column2, 
     row_number() over (partition by column2 order by id) as rn 
    from demo_table 
) t 
where rn <= 2; 

は私が期待したものが返されませんでした。

id | column1 | column2 |  timestamp 
3 | 3 | 4 | 2016-09-24 00:20:20 
5 | 5 | 4 | 2016-09-25 00:20:20 
6 | 6 | 3 | 2016-09-27 00:20:20 
7 | 7 | 5 | 2016-09-28 00:20:20 
8 | 8 | 5 | 2016-09-28 00:20:20 
9 | 9 | 3 | 2016-09-30 00:20:20 
id | column1 | column2 |  timestamp 
6 | 6 | 3 | 2016-09-27 00:20:20 
9 | 9 | 3 | 2016-09-30 00:20:20 
5 | 5 | 4 | 2016-09-25 00:20:20 
3 | 3 | 4 | 2016-09-24 00:20:20 
7 | 7 | 5 | 2016-09-28 00:20:20 
8 | 8 | 5 | 2016-09-28 00:24:20 

表はCOLUMN2に別個のものでなければならない、それはまた

これが可能である一緒に列に同じ値のマッピング2つの行を維持する必要があります:私はこの結果を与えるクエリを必要とする?

+0

予想される出力は、実際の出力と同じです。 – redneb

+0

@rednebいいえ実際には、タイムスタンプを見ると、その次に来る必要がある行の順番を変更する –

+2

それでは、単にORDER BYを追加してください。 – redneb

答えて

0

列2の各値に「2つの最新の」行が表示されるようにするには、over clauseorder by要素を調整します。

ここでは、「最近の」行を取得します。の降順でタイムスタンプを注文してください。万一、オーダーにタイブレーカーが必要な場合は、id列が保持されます。

select id, column1, column2, timestamp 
from (
    select id, column1, column2, timestamp, 
     row_number() over (partition by column2 order by timestamp DESC, id) as rn 
    from demo_table 
) t 
where rn <= 2 
order by column2, timestamp 
; 

(タイムスタンプの最終順位がその後、昇順に変更)

注:over clauseでは、それは(新しい「パーティション」が遭遇したとき)の再起動を注文時に制御partition by引数で、 order byは、「パーティション」内のどの行が1になるかを制御します。

+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –

関連する問題