2012-02-03 26 views
0

これまでに回答があった場合はお詫び申し上げます。グループクエリで最初に選択

colA | colB | colC 
-----|------|----- 
a | 1 | 9 
b | 1 | 3 
c | 4 | 2 

colA | colB | colC 
-----|------|----- 
a | 1 | 9 
a | 2 | 8 
b | 1 | 4 
b | 2 | 3 
b | 1 | 3 
c | 5 | 1 
c | 4 | 2 

及びIは、(ASC C、B列でソートするとき、列Aの)各グループから最初の行を選択する:

は、私は、次の表があるとこれらの結果を得るためにクエリを構造化する最も簡単な方法は何ですか?

(Postgresqlの9)

おかげで、あなたが使用することができP.

答えて

1

window functionと派生テーブル:

select cola, colb, colc 
from (
    select cola, colb, colc, 
      rank() over (partition by cola order by colb, colc asc) as r 
    from your_table 
) as dt 
where r = 1 

ウィンドウ機能はかなり便利ですし、みんなのSQLツールキットにする必要があります。

+0

答えをありがとう、しかし、私は私の解決策が "ちょっと"だと思うので、私がそうでなければ私は自分にダニ(1日か2日)を与えるでしょう。あなたが同意しない場合、私は議論に感謝します! (PSはあなたの答えをすべてupvotedしています...) – pstanton

+0

あなたが正しいので、私はあなたのことを刻んでいます。もっと「標準的」なアプローチですが、私の場合は私のソリューションを使用します。どうも。 – pstanton

0

私はあなたと同じ問題を抱えていました。私はウィンドウ関数を使用し、派生テーブルを使用して問題を解決しました。ほかに

3

(大学もの上で私を回した)ウィンドウ関数を使用しての答え「MUが短すぎる」私は私が機能はるかに簡単 『に明確な』を使用して機能を実現することが分かっ:

select distinct on (colA) * from tbl order by colA, colB, colC; 
+0

[DISTINCT ON](http://www.postgresql.org/docs/current/interactive/queries-select-lists.html#QUERIES-DISTINCT)は、この場合の合理的なアプローチです。唯一の欠点は、それが非標準であることです。私は将来の校正のための標準ベースのソリューションを好む傾向があります。 –

関連する問題