子查询的复杂条件,我有一个复杂的查询,其代码和输出如下
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 by
和having
:
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