如何从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中的表中找到一周的峰值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 T-SQL 中的表中选择前 N 行?

如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数

如何使用任意工作日作为一周的开始从 MySQL 中的日期中提取一周?

如何使用 SQL 或 PLSQL 将多行数据插入 Oracle 中的表中?

如何使用间隔 1 分钟在两个日期之间将时间序列数据生成到 Oracle PL/SQL 中的表中?

如何使用 pl/sql 中的游标将多列数据插入包含单列的表中?