首页 > 解决方案 > oracle如何统计每周的数据?

问题描述

我在两个问题上挣扎。

第一个问题是;我想每周计算数据并查看总数据。总数据不正确。W1显示最近一周的W2数据,显示最近两周的数据等。

结果:

水果 w1 w2 w3 w4 全部的
苹果 6 2 4 1 25
香蕉 7 1 5 9 32

我想要的版本:

水果 w1 w2 w3 w4 全部的
苹果 6 2 4 1 13
香蕉 7 1 5 9 22

代码:

COUNT(CASE WHEN to_number(to_char(Eventtime,'W'))
    =to_number(to_char(SYSDATE-7,'W')) THEN 1 END) AS "w1"
COUNT(CASE WHEN to_number(to_char(Eventtime,'w'))
    =to_number(to_char(SYSDATE-14,'w')) THEN 1 END) AS "w2"
COUNT(CASE WHEN to_number(to_char(Eventtime,'W'))
    =to_number(to_char(SYSDATE-21,'W')) THEN 1 END) AS "w3"
...
Count (*) as Total
From XXX
where eventtime > sysdate-28

我怎样才能得到正确的总数?

第二个问题是;我找不到W5数据。我尝试在下面添加代码,但W5显示W1数据。

COUNT(CASE WHEN to_number(to_char(Eventtime,'W'))
    =to_number(to_char(SYSDATE-35,'W')) THEN 1 END) AS "w5"
where eventtime > sysdate-35
水果 w1 w2 w3 w4 w5 全部的
苹果 6 2 4 1 6 43
香蕉 7 1 5 9 7 37

如何获取最近 5 周的数据?

标签: sqloracle

解决方案


您可以使用DENSE_RANK编号为 1、2、3、4 和 5 的最后五周'IYYY-IW'。为此使用 ISO 周(格式)。

select wk1, wk2, wk3, wk4, wk5, wk1 + wk2 + wk3 + wk4 + wk5 as total
from
(
  select
    fruit,
    dense_rank() over (order by to_char(eventtime, 'iyyy-iw') desc) as wk
  from fruits
  where eventtime > trunc(sysdate) - interval '35' day
)
pivot
(
  count(*)
  for wk in (1 as wk1, 2 as wk2, 3 as wk3, 4 as wk4, 5 as wk5)
)
order by fruit;

推荐阅读