2017-10-08 8 views
1

サブクエリで助けが必要です。 最初の列でグループ化し、2番目の列でサブグループ化してソートし、MINを選択して3番目の列をソートし、4番目の列からMINに関連付けられた値を選択します。このPostgreSQLサブクエリ

| subject | id | num | code | 
|---------|----|-----|------| 
| 2  | 34 | 45 | 1234 | 
| 2  | 34 | 3 | 1267 | 
| 3  | 23 | 32 | 2345 | 
| 3  | 23 | 16 | 4568 | 
| 3  | 30 | 12 | 5678 | 
| 5  | 29 | 53 | 2354 | 


| subject | id | num | code | 
|---------|----|-----|------| 
| 2  | 34 | 3 | 1267 | 
| 3  | 23 | 16 | 4568 | 
| 5  | 29 | 53 | 2345 | 
+0

したばかりのデータまたは期待される結果を変更diid:最小と行を見つける(最大)値が低い(高い)値が存在しない行とrowforを見つけることと等価ですか? –

+0

混乱して申し訳ありません。いいえ、私はデータや予想される結果を変更しませんでした。私はそれをテーブルのように見せようとしていました。 – sac

+0

各行を4文字ずつインデントするだけの表形式にします。ツールバーにボタン{}があり、これもあなたのために行います。 –

答えて

0

1つの可能な方法と同様に

何かがxxxの限界によってLATERAL subqueryとORDERを使用することです1

ライブデモ:http://sqlfiddle.com/#!17/71480/6

SELECT y.* 
FROM (
    SELECT distinct subject 
    FROM table1 
) x, 
LATERAL (
    SELECT * FROM table1 t 
    WHERE t.subject = x.subject 
    ORDER BY id, num 
    LIMIT 1 
) y 
order by 1 

| subject | id | num | code | 
|---------|----|-----|------| 
|  2 | 34 | 3 | 1267 | 
|  3 | 23 | 16 | 4568 | 
|  5 | 29 | 53 | 2354 | 
0


SELECT * 
FROM ztable zt 
WHERE NOT EXISTS(
     SELECT * FROM ztable nx 
     WHERE nx.subject = zt.subject 
     AND nx.num < zt.num 
     AND nx.id < zt.id 
     ); 
関連する問題