web-dev-qa-db-fra.com

Comment obtenir un seul enregistrement pour chaque ligne en double de l'identifiant dans Oracle?

supposons que j'ai cette table:

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

comment obtenir les résultats de seulement 1 de chaque identifiant de groupe? dans ce cas, il peut y avoir plusieurs images pour un identifiant de groupe, je veux juste un résultat de chaque group_id

j'ai essayé distinct mais je n'obtiendrai que group_id. max pour l'image ne fonctionnerait pas non plus.

7
Psychocryo

Il n'y a aucune fonction d'agrégation standard dans Oracle qui fonctionnerait avec BLOBs, donc les solutions GROUP BY Ne fonctionneront pas.

Essayez celui-ci basé sur ROW_NUMBER() dans une sous-requête.

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;

Ce qui précède doit renvoyer la première ligne (basée sur image_id) Pour chaque groupe.

SQL Fiddle

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