我在使用这个小的演示数据从子查询中选择时遇到了问题:
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
但是,如果我想要其他列,我必须将它们添加到组语句中,否则我会得到“不是组声明”,从而使它过时,任何想法?
答案 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)
您希望根据selected
和ID
分组获得class_id
列的最小值和所有其他列,然后您可以使用MIN() over partitioned by
函数 -
SELECT ID,
CLASS_ID,
min(SELECTED) over (partition by ID,CLASS_ID order by 1) ,
col1 ...
FROM ( SELECT... )