如果值不在oracle组中,如何获得

问题描述 投票:0回答:1

我有一个名为statustimeline的表,其结构为

id | applicationid | status | createdon
---+---------------+--------+----------
11 |1              |4       |     
---+---------------+--------+----------
10 |1              |3       |
---+---------------+--------+----------
9  |1              |2       |
---+---------------+--------+----------
8  |1              |1       |
---+---------------+--------+----------
7  |2              |3       |
---+---------------+--------+----------
6  |2              |2       |
---+---------------+--------+----------
5  |2              |1       |
---+---------------+--------+----------
4  |3              |5       |
---+---------------+--------+----------
3  |3              |3       |
---+---------------+--------+----------
2  |3              |2       |
---+---------------+--------+----------
1  |3              |1       |
---+---------------+--------+----------

如果我按应用程序ID对其进行分区,将分为三组。

select applicationid,ngstatus, row_number() over (partition by applicationid order by id desc) rownumbr 
from applicationstatustimeline ;

我只选择那些组的状态从未为status = 4的applicationid(在这种情况下,applicationid = 2,applicationid = 3)

有任何功能吗?

oracle group-by oracle11g oracle12c
1个回答
0
投票

如果您想在这里使用解析函数,我们可以使用COUNT

WITH cte AS (
    SELECT t.*,
        COUNT(CASE WHEN status = 4 THEN 1 END) OVER (PARTITION BY applicationid) AS four_cnt
    FROM applicationstatustimeline t
)

SELECT id, applicationid, status, createdon
FROM cte
WHERE four_cnt = 0;

在上面的CTE中,我们生成了一个计算列four_cnt,其值对于每组applicationid记录都是相同的。假设status=4从未出现,那么该值将为零,否则它将大于零。


0
投票

为什么不是简单的minus集合运算符?

© www.soinside.com 2019 - 2024. All rights reserved.