1
具有桌子人如何使用自定义顺序为每个子组选择第一行?
和表PersonRecord
,我需要选择只有一个每个人的记录,用最大状况的记录。 状态按C > B > A
排序,一个人可以有多个具有不同或相同状态的记录,我总是需要选择更高的状态或第一个(如果此人具有相同状态的记录)。
我提出以下查询来获取行有序
select ep.personid, ep.persondesc, records.veryimportantcode, records.status
from extperson ep
left join
(
select rownum as rn, v.* from
(
select pr.personid, pr.veryimportantcode, pr.status
from personrecord pr
group by pr.personid, pr.veryimportantcode, pr.status
order by pr.personid,
decode(pr.status,
'C', 1,'B', 2,'A', 3,
4)
) v
) records
on ep.personid = records.personid
它给我:
我需要
|PERSONID |PERSONDESC|VERYIMPORTANTCODE |STATUS |
|00325465 |Bjork |(null) |(null) |
|00527513 |Paul |ZP-2143540 |A |
|00542369 |Hazard |ZH-7531594 |C |
|0324567 |Jhon |ZJ-2346570 |B |
我试试这个使用来实现我计算重复次数的附加物化子查询并与where (subquerymat.nrorepeat > 1 and rownum = 1) or (subquerymat.nrorepeat = 1 or subquerymat.nrorepeat is null)
左加入,但不起作用。
这个查询有一个非常重要的规则,我会在视图内的联合的右侧追加这个查询,然后我不能使用存储过程。
ORA-00904: “RN”:ungültigerBezeichner 00904. 00000 - “%s的:无效的标识符” – 2017-03-05 23:29:03
@ florian.isopp做你有问题吗?如果你得到这个错误,那么你可能没有在你的内联视图中显示的分析功能。事实上,上面的内嵌视图返回了一个名为'rn'的列。 – 2017-03-07 00:38:14