Oracle,子查询的复杂条件



子查询的复杂条件,我有一个复杂的查询,其代码和输出如下

Query :
select * from
(select item , value, date, day
from dual)

输出:

item  | value |   date  | day
item1 |   5  |1/1/2020 |  1
item2 |   20  |1/1/2020 |  1
item1 |   1   |2/1/2020 |  2
item2 |   3   |2/1/2020 |  2
item1 |   35  |3/1/2020 |  3
item2 |   3  |3/1/2020 |  3

需要:仅选择天数之和为(值(>的行;10同日

item  |  value | date    | day
item1 |   5   |1/1/2020 | 1
item2 |   20   |1/1/2020 | 1
item1 |   35   |3/1/2020 | 3
item2 |   3   |3/1/2020 | 3

需要选择应用条件的所有行

仅选择天数总和为(值(的行>10同日

您可以使用窗口sum()来计算子查询中每天的总值,然后在外部查询中进行筛选:

select *
from (
select t.*, sum(value) over(partition by day) sum_value
from mytable t
) t
where sum_value > 10

这解决了最初的问题:

我认为这只是group byhaving:

select item, sum(value), date day
from t
group by item, date, day
having sum(value) > 10;

或者,在您所拥有的示例数据中,聚合可能甚至没有必要:

select t.*
from t
where value > 10;

编辑:

对于修改后的问题,您需要窗口函数:

select t.*
from (select t.*, sum(value) over (partition by item, date, date) as total_value
from t
) t
where total_value > 10

最新更新