SQL从子查询中选择

时间:2014-02-03 13:19:42

标签: sql oracle

我在使用这个小的演示数据从子查询中选择时遇到了问题:

ID          CLASS_ID               PROP          STATUS        ROW     SELECTED    STEP
12345679    1312            0         21           3       07-FEB-14    1
12345679    1312            0         21           1       26-FEB-14    -1

我想获取所有信息(每列),下面的sql工作正常

SELECT ID,CLASS_ID,min(SELECTED) FROM ( SELECT... ) GROUP BY ID,CLASS_ID

ID          CLASS_ID             SELECTED   
12345679    1312                07-FEB-14   

但是,如果我想要其他列,我必须将它们添加到组语句中,否则我会得到“不是组声明”,从而使它过时,任何想法?

2 个答案:

答案 0 :(得分:2)

您想使用分析函数row_number()

select ID, CLASS_ID, PROP, STATUS, ROW, SELECTED  
from (select s.*, row_number() over (partition by id, class_id
                                     order by selected desc) as seqnum
      from (<subquery>) s
     ) s
where seqnum = 1;

答案 1 :(得分:1)

您希望根据selectedID分组获得class_id列的最小值和所有其他列,然后您可以使用MIN() over partitioned by函数 -

SELECT ID,
       CLASS_ID,
       min(SELECTED) over (partition by ID,CLASS_ID order by 1) , 
       col1 ...
FROM ( SELECT... )