如何使用两个日期范围进行计算(分区依据和之前)

Posted

技术标签:

【中文标题】如何使用两个日期范围进行计算(分区依据和之前)【英文标题】:How to calculate with two date range (Partition by and PRECEDING) 【发布时间】:2017-05-26 10:09:30 【问题描述】:

我想使用以下公式计算和比较实际季度成本与上一季度成本:(实际年度平均季度成本)/(去年平均季度成本)

我已经完成了实际的宿舍:

avg ("TOTAL_MONTHLY_COST_IN_USD") OVER (PARTITION BY START_YEARS, 
START_QUARTERS ORDER BY "START_QUARTERS" desc) as "PAST_Q"

但最难的是每季度获得实际的 -1 年平均成本。在最终结果中,我希望我的表格如下所示:

ACT_Q | PAST_Q | DIVIDE
567.2 | 456.6  |  1.24

为了获得 PAST_Q,我尝试使用 partition by 和 PRECEDING。 我有以下计算支持列:

START_DATE , START_MONTH, START_QUARTER , START_YEAR .

此外,我使用 add_month(x, -12) 创建了这些并将它们命名为 LAST_YEAR 等。

我的第一次尝试: 我在内部选择中将 sum_cost 计算和 count_rows 分开,然后将它们分开,但结果我只得到 0 个值。

case when nvl(quarter_count, 0)<>0 then
sum_totalcost/quarter_count
end as "PAST_AVG_COST_QUARTERLY"

(avg ("TOTAL_MONTHLY_COST_IN_USD") OVER (PARTITION BY START_YEARS, START_QUARTERS ORDER BY ACTUAL_YEAR_QUARTER RANGE BETWEEN 450 PRECEDING AND 0 FOLLOWING) - avg ("TOTAL_MONTHLY_COST_IN_USD") OVER (PARTITION BY START_YEARS, START_QUARTERS ORDER BY ACTUAL_YEAR_QUARTER RANGE BETWEEN 360 PRECEDING AND 0 FOLLOWING)) as sum_cost

(count (*) OVER (PARTITION BY START_YEARS, 
START_QUARTERS ORDER BY 
ACTUAL_YEAR_QUARTER RANGE BETWEEN 450 PRECEDING AND 0 FOLLOWING) - count (*) OVER
 (PARTITION BY START_YEARS, START_QUARTERS 
ORDER BY ACTUAL_YEAR_QUARTER RANGE BETWEEN 360 PRECEDING AND 0 FOLLOWING)) as count_rows

有人知道如何计算这个范围的最佳实践吗?这真的很有帮助!提前致谢。

【问题讨论】:

编辑您的问题并提供示例数据和所需的结果。 【参考方案1】:

幸运的是,我通过使用“WITH”语句创建 2 个表解决了这个问题。该表包含实际平均成本/季度。这两个表都有这些数据: act_YEAR | act_QUARTER |过去_年 |过去季度 |国家 | MONTHLY_COST 然后我加入了过去一年和季度的第一张桌子和第二张桌子的年份和季度。

【讨论】:

以上是关于如何使用两个日期范围进行计算(分区依据和之前)的主要内容,如果未能解决你的问题,请参考以下文章

如何分组,计算和映射日期范围? [关闭]

如何从PHP中的两个日期范围内提取每个星期一和每两周一次的星期一?

如何计算日期时间范围内的 n 个平均值?

如何更改现有表以在 Oracle 中创建范围分区

如何从 iOS 中两个日期范围内的照片库中获取图像?

如何将使用日期范围选择器获得的值转换为两个单独的日期和时间?