【问题标题】:How to calculate sum of a metric for rest of the month, quarter and year daily in Oracle如何在Oracle中每天计算剩余月份、季度和年度的指标总和
【发布时间】:2022-01-16 02:37:57
【问题描述】:

我有一张表格,其中包含从 2021 年 1 月 1 日到当前日期的数据。

我正在使用这些查询针对每个日期计算 MTD、QTD、YTD 值

MTD-“sum(METRIC) over (partition by segment_grp, trunc(activity_date,'MM') order by activity_date range between activity_date-trunc(activity_date,'MM') before and 0 following)MTD_METRIC”

QTD-“sum(METRIC) over (partition by segment_grp, trunc(activity_date,'Q') order by activity_date range between activity_date-trunc(activity_date,'Q') before and 0 following) QTD_METRIC”

YTD- "sum(METRIC) over (partition by segment_grp, trunc(activity_date,'YYYY') order by activity_date range between activity_date-trunc(activity_date,'YYYY') 之前和之后的0) YTD_METRIC"

我还想计算当月剩余时间、季度剩余时间和一年剩余时间的指标。如何修改上述查询来做到这一点?

2021 年 11 月的示例数据: 创建表 TEMP_SUMMARY ( ACTIVITY_DATE日期, SEGMENT_GRP VARCHAR2(140 个字符), 月 VARCHAR2(6 个字符), 年份 VARCHAR2(4 个字符), 季度字符(2 个字符), 公制编号, MTD_METRIC NUMBER, QTD_METRIC NUMBER, YTD_METRIC NUMBER, ROM_METRIC NUMBER, ROQ_METRIC NUMBER, ROY_METRIC NUMBER )

插入 TEMP_SUMMARY (ACTIVITY_DATE,SEGMENT_GRP,MONTH,YEAR,QUARTER,METRIC,MTD_METRIC,QTD_METRIC,YTD_METRIC) 值 (to_date('01/11/2021','dd/mm/yyyy'), 'ENT', '202111', '2021', 'Q4', 149, 149, 5219, 56396)

插入 TEMP_SUMMARY (ACTIVITY_DATE,SEGMENT_GRP,MONTH,YEAR,QUARTER,METRIC,MTD_METRIC,QTD_METRIC,YTD_METRIC) 值 (to_date('02/11/2021','dd/mm/yyyy'), 'ENT', '202111', '2021', 'Q4', 382,​​ 531, 5601, 56778)

11 月 1 日-
本月剩余时间:总和(11 月 2 日至 30 日公制)
本季度剩余时间:总和(11 月 2 日至 30 日公制,12 月美历) 今年剩余时间:总和(11 月 2 日至 30 日公制,12 月美历)

11 月 2 日- 本月剩余时间:总和(11 月 3 日至 30 日公制)
本季度剩余时间:总和(11 月 3 日至 30 日公制,12 月公制)
今年剩余时间:总和(11 月 3 日至 30 日公制,12 月公制)

谢谢!

【问题讨论】:

  • 今后,请将示例数据作为文本而不是图像。包括表定义(例如,您不能将列命名为“日期”)。理想情况下,以我们可以运行的 DML 语句的形式包含示例数据(或创建指向您已完成该工作的 dbfiddle 之类的链接)。

标签: sql oracle11g


【解决方案1】:

看起来你只想要一个简单的分析函数

select sum( daily_count ) over (partition by month order by dt) mtd,
       sum( daily_count ) over (partition by quarter order by dt) qtd,
       sum( daily_count ) over (partition by year order by dt) ytd
  from your_table

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多