web-dev-qa-db-ja.com

OracleでIDの重複する行ごとに1つのレコードのみを取得するにはどうすればよいですか?

このテーブルがあるとしましょう:

group_id | image | image_id |
-----------------------------
23        blob       1
23        blob       2
23        blob       3
21        blob       4
21        blob       5
25        blob       6
25        blob       7

各グループIDのうち1つだけの結果を取得する方法この場合、1つのグループIDに複数の画像が存在する可能性があります。それぞれの結果が1つだけ必要ですgroup_id

個別に試しましたが、group_idしか取得できません。画像の最大値も機能しません。

7
Psychocryo

Oracleにはno標準集計関数があり、BLOBsで機能するため、_GROUP BY_ソリューションは機能しません。

サブクエリでROW_NUMBER()に基づいてこれを試してください。

_SELECT inn.group_id, inn.image, inn.image_id
FROM
(
    SELECT t.group_id, t.image, t.image_id, 
        ROW_NUMBER() OVER (PARTITION BY t.group_id ORDER BY t.image_id) num
    FROM theTable t
) inn
WHERE inn.num = 1;
_

上記は、各グループの最初の(_image_id_に基づく)行を返す必要があります。

SQLフィドル

22
PM 77-1
SELECT  group_id, image, image_id
FROM    a_table
WHERE   (group_id, image_id) IN
        (
            SELECT  group_id, MIN(image_id)
            FROM    a_table
            GROUP   BY
                    group_id
        )
;
1
the_slk