如何从oracle sql中的表中找到一周的峰值
Posted
技术标签:
【中文标题】如何从oracle sql中的表中找到一周的峰值【英文标题】:how to find peak value of the week from table in oracle sql 【发布时间】:2021-08-05 12:15:50 【问题描述】:我有一个操作表,如下所示:
date value
01.12.20 1100
04.12.20 920
09.12.20 350
18.12.20 5000
我需要找到过去 n 周每周的峰值。 所以预期结果应该如下所示:
week value_sum
week 1 1100
week 2 350
week 3 5000
我已经尝试将它用于分组:
select
trunc(mydate, 'ww') week,
sum(myvalue) value_sum
from myTABLE
where 1=1
and mydate >=date'2020-12-01'
and mydate < date'2021-01-01'
group by
trunc(mydate, 'ww')
having max(sum(myvalue))
这可以获得前 7 周的天数,我可以用作:
WITH date_range as
(select trunc(sysdate,'WW')-(rownum-1)*7 week
from (select rownum from dual)
connect by level <=13
order by 1)
select * from date_range
那么我该如何解决我的问题呢?
【问题讨论】:
2020年峰值如何?它甚至不在数据中?您的问题不清楚。 是的,你是对的,已解决,谢谢! 【参考方案1】:我认为您正在寻找最大值 - 它代表峰值,您的第一个修改 sum->max 的查询将完成这项工作,减少了 having 子句。
select
trunc(mydate, 'ww') week,
max(myvalue) value_sum
from myTABLE
where 1=1
and mydate >=date'2020-12-01'
and mydate < date'2021-01-01'
group by
trunc(mydate, 'ww')
【讨论】:
星期几的最大值。所以首先我需要总结每天的值,然后按周分组,然后选择每周天数总和之间的峰值=最大值。所以这个解决方案对我来说并不完美。 @Kurasao,样本数据和您发布的初始消息中没有任何内容表明您的评论。因此,这个确实返回了你想要的结果(不过,如果ww
被修改为iw
)。我们谈论的周数是 49,50 和 51(不是您预期的结果所暗示的 1、2、3)。样本数据太差;什么“每天总结价值”?哪一天”?您发布的所有日期都彼此不同。我建议你大量重写最初的问题,让愿意提供帮助的人更清楚。以上是关于如何从oracle sql中的表中找到一周的峰值的主要内容,如果未能解决你的问题,请参考以下文章
如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数
如何使用任意工作日作为一周的开始从 MySQL 中的日期中提取一周?
如何使用 SQL 或 PLSQL 将多行数据插入 Oracle 中的表中?