首页 > 解决方案 > 根据日期计数记录,例如 0 到 7 天、7 到 14 天和 14 到 28 天

问题描述

我有一个包含三列的表IDstatus并且CreateDate。我想要一个基于 createdate 的表中的计数

仅过去 0-7 天、7-14 天、14-28 和 28-35 天...

标签: sqloracledate

解决方案


使用如下所示的示例表:

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>

推荐阅读