sql - 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 周的数据?
解决方案
您可以使用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;
推荐阅读
- windows - 是否有独立于操作系统的方法将 OpenCL 内核转换为 SPIR-V?
- gitlab - 如何为 Swagger Editor 创建指向受保护 url 中的 .yml 文件的共享链接?
- react-native - 反应原生 SVG onTouch 函数与 onResponder 函数
- python - Pycharm 不会正确地将数字相加(奇怪的返回)
- python - 模板的django更新部分动态发布模型保存而不重新渲染
- node.js - 如何创建节点 js https (Windows)
- foreach - Symfony 5 getDoctrine->getRepository() 为 foreach() Doctrine CachedReader.php 提供的参数无效
- mysql - 我如何允许在单个单元格中输入多个值mysql
- c# - ModelState 应用于 MVC 视图中的所有表单
- excel - 如何在单个单元格中输入长数字并添加它们而不更改值或单元格格式