Oracle从结果集中获取第一条记录

时间:2015-10-05 14:36:09

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

我有一个类似的查询,下面会给出以下结果。对于一个给定的pcid,可能存在一个或多个图像。如果pcid返回的图像超过1,我只想获取第一条记录。我知道明显不会在这种情况下起作用。任何想法将不胜感激。感谢

preg_replace('~(?<=\d)\h*,\h*(?=\d)~', '', $str);

期望的结果,

select p.pcid,p.pc_name,p.pc_image_name
from pc p LEFT JOIN pc_goods pcm on p.pcid = pcm.pcid AND pcm.media_type = 'I' 
AND pcm.act_ind = 'Y' AND pcm.fea_ind = 'Y' INNER JOIN pc_cat pcat 
ON p.category_id = pcat.cat_id 
and p.fea_ind = 'Y' AND p.act_ind = 'Y'
order by pcid

Current results     
    pcid    pc_name   pc_image_name
    --------------------------------
    1120    testone   one.jpg
    1120    testwo    two.jpg
    1121    testthree three.png
    1125    testfour  four.png
    1128    test5     five.jpg
    1128    test6     six.jpg 

2 个答案:

答案 0 :(得分:1)

不测试或解决为什么需要左连接... 如果imageName是唯一的,那么这样的事情可能会起作用。

matchconfigcategories

答案 1 :(得分:1)

您可以使用row_number窗口功能:

row_number() over (partition by p.pcid order by null) as rn

...按pcid分区的地方。由于您似乎并不关心选择哪个图像,因此您可以按任意常数值排序(在这种情况下我使用了null)。

select pcid,pc_name,pc_image_name
  from (
     select p.pcid,p.pc_name,p.pc_image_name,
            row_number() over (partition by p.pcid order by null) as rn
    from pc p LEFT JOIN pc_goods pcm on p.pcid = pcm.pcid AND pcm.media_type = 'I' 
    AND pcm.act_ind = 'Y' AND pcm.fea_ind = 'Y' INNER JOIN pc_cat pcat 
    ON p.category_id = pcat.cat_id 
    and p.fea_ind = 'Y' AND p.act_ind = 'Y')
 where rn = 1
 order by pcid