【问题标题】:Day level Calculation in oracle sqloracle sql中的日级计算
【发布时间】:2018-07-16 04:53:00
【问题描述】:

我有两年的静态数据。我的列名为 stats_date,P2P_volume。最初我在 oracle sql developer 中创建了以下单日查询

选择“1”作为 KPI_ID,“P2P”作为 KPI_DESC,“22-MAR-17”作为日期, (sum(STATS_DATE 在 add_months('22-MAR-17',0)-13 之间的情况) 然后 add_months('22-MAR-17',0)-7 然后 P2P_VOLUME else 0 end )) LAST_WEEK_Volume,

  (sum(case when STATS_DATE between add_months('22-MAR-17',0)-6
and add_months('22-MAR-17',0)  then P2P_VOLUME else 0 end )) THIS_WEEK_Volume from table

我的问题是我想创建动态查询,这将给我 Last_week_volume 和 this_week_volume 两年的日期。而不是一天

【问题讨论】:

  • 参考截图请点击--->>“示例请参考以下截图”
  • 到目前为止你写了什么?当您明确使用 Oracle 时,为什么还要标记这个问题 [sql-server]
  • 我可以轻松地将 sql-server 查询转换为 oracle sql ..so 等待 sql-server 中的答案或逻辑。谢谢!
  • 目前还不清楚你想要什么。请发布您的测试数据,并将您的预期输出显示为文本而不是屏幕截图
  • 仍然不是一个完整的问题,但我没有精力再重复自己。我只是猜测你没有告诉我们的部分。

标签: sql sql-server oracle oracle11g


【解决方案1】:

在没有完整的样本数据和要求的情况下,这是我的假设:

  1. 每个 KPI 每天一行
  2. 可以满足current weekprevious week的定义 通过使用 'IW' 日期格式掩码

此解决方案使用子查询来计算每周度量值的总和。这会输入主查询,该查询使用分析 lag() 函数来显示当前一周和前一周的总数。

with cte as (
  select kpi
        , to_char(static_date, 'YYYY') as yr
       , to_char(static_date, 'IW') as wk
       , sum(volume) as wk_volume
       , sum(value) as wk_value
       , sum(revenue) as wk_revenue
  from t23
  group by kpi,to_char(static_date, 'YYYY'), to_char(static_date, 'IW')
)
select kpi
       , yr||'-'||wk as year_wk
       , wk_volume as curr_wk_volume
       , lag(wk_volume) over (order by yr, wk) as prev_wk_volume
       , wk_value as curr_wk_value
       , lag(wk_value) over (order by yr, wk) as prev_wk_value
       , wk_revenue as curr_wk_revenue
       , lag(wk_revenue) over (order by yr, wk) as prev_wk_revenue
from cte
order by 1, 2
/

a SQL Fiddle demo here

【讨论】:

  • 感谢您的回复先生。我每周都有输出。而不是这个我想在白天做,所以我该怎么做!你能告诉我吗?
  • 在您编辑您的问题之前,我不会再向该线程添加任何内容,并使用一组具有代表性的示例记录和一个明显源自该数据的示例输出。一个星期以来我一直要求你这样做,但你仍然没有这样做。
  • 根据你的建议我编辑我的帖子。并提到了所有的事情!如果还不清楚,请提出建议。
  • 真的没有任何意义吗?我已经多次告诉您需要哪些信息来帮助您,但您仍然没有提供。请理解,你是唯一真正关心你是否得到你想要的答案的人。我已经尽我所能来帮助你,但是有一个限制,就是这样。球仍在你的球场上。
  • 真的很抱歉。可用数据是什么意思??我不明白。我已经提到我有两列 stats_date,p2p_volume 。基于列我需要找出 last_week_p2p_volume 和 current_week_p2p_volume 每天 2 年 ....所以最后我的最终输出应该包含每天 last_week_p2p_volume 和curent_week_p2p_volume 2 年。
猜你喜欢
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
相关资源
最近更新 更多