如何在oracle中为每个重复的id行获取一条记录?

时间:2013-11-12 03:17:58

标签: sql oracle greatest-n-per-group

假设我有这张表:

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个的结果?在这种情况下,一个组ID可能有多个图像,我只想要每个 group_id的一个结果

我试过了不同但我只会得到group_id。图像的最大值也不起作用。

3 个答案:

答案 0 :(得分:20)

Oracle中有标准聚合函数可用于BLOB,因此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 Fiddle

答案 1 :(得分: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
        )
;

答案 2 :(得分:0)

select * from 
  (select t1.*,
   ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY group_id desc) as seqnum
   from tablename t1) 
where seqnum=1;