sql - 根据日期计数记录,例如 0 到 7 天、7 到 14 天和 14 到 28 天
问题描述
我有一个包含三列的表ID
,status
并且CreateDate
。我想要一个基于 createdate 的表中的计数
仅过去 0-7 天、7-14 天、14-28 和 28-35 天...
解决方案
使用如下所示的示例表:
SQL> select trunc(sysdate) today from dual;
TODAY
----------
21.08.2021
SQL> with temp as
2 (select id, createdate, trunc(sysdate) - createdate diff_days
3 from test
4 )
5 select * from temp
6 order by createdate desc;
ID CREATEDATE DIFF_DAYS
---------- ---------- ----------
1 20.08.2021 1
2 19.08.2021 2
3 13.08.2021 8
4 12.08.2021 9
5 02.08.2021 19
6 26.07.2021 26
6 rows selected.
SQL>
你可以这样做(注意你的时期不正确;同一行不能(或者,我应该说:不应该)属于两个时期。它不能是 0-7 和 7- 14 如果日期差正好是7 天。它要么在第一个周期,要么在第二个周期,而不是两者。
SQL> with temp as
2 (select id, createdate, trunc(sysdate) - createdate diff_days
3 from test
4 )
5 select
6 sum(case when diff_days >= 0 and diff_days < 7 then 1 else 0 end) " 0- 6 days",
7 sum(case when diff_days >= 7 and diff_days < 14 then 1 else 0 end) " 7-13 days",
8 sum(case when diff_days >= 14 and diff_days < 21 then 1 else 0 end) "14-20 days",
9 sum(case when diff_days >= 21 and diff_days < 28 then 1 else 0 end) "21-27 days"
10 from temp;
0- 6 days 7-13 days 14-20 days 21-27 days
---------- ---------- ---------- ----------
2 2 1 1
SQL>
推荐阅读
- c++ - 如何强制执行唯一的错误消息
- docker - ipvlan L3 docker 无法 ping 主机
- react-native - React Native如何以24小时格式获取时间?
- javascript - google如何通过多个域管理sso [google.com, youtube.com]
- ssl - 如何获取 .cer 或 .crt 格式的公钥
- qt - QTableWidget 选择行太慢
- python - 如果需要,使用 SQL 或代码从 multipe(4) 表连接中获取结果(python)
- javascript - 包含对象的数组长度
- haskell - 解析错误:Haskell
- java - Jenkins_获取maven项目的编译错误(找不到符号)导致构建失败