假设我有这张表:
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。图像的最大值也不起作用。
答案 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
)行。
答案 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;