我想每月生成一份报告

  • 本文关键字:一份 报告 sql oracle
  • 更新时间 :
  • 英文 :


--查询--

select count(*)
from TOKEN
where CODE = xxx
and createdDatetime >=trunc(sysdate);

--结果——

Count(*)
72

目前,我使用的是一个每天自动运行的监控工具,它可以获取一整天的总计数。现在我想运行一个查询,它将自动统计整个月的数据,而不需要每月更改查询。

您使用的条件:

and createdDatetime >= trunc(sysdate);

返回今天的数据,因为应用于SYSDATETRUNC给出了"今天的最初时刻"。

但是,如果你稍微调整一下,将SYSDATE截断为一个月,你就会得到当月的第一天,例如

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> select
2    trunc(sysdate) today,
3    trunc(sysdate, 'mm') this_month
4  from dual;
TODAY               THIS_MONTH
------------------- -------------------
23.07.2018 00:00:00 01.07.2018 00:00:00
SQL>

所以你最终会使用

and createdDatetime >= trunc(sysdate, 'mm')

取决于你喜欢什么,告诉"整个月";

从一个月前开始的时间段:

select count(1)
from TOKEN
where CODE = 'xxx'
and months_between(trunc(sysdate),createdDatetime)<=1;

从本月初开始:

select count(1)
from TOKEN
where CODE = 'xxx'
and to_char(createdDatetime,'yyyymm') = to_char(trunc(sysdate),'yyyymm');

SQL Fiddle演示

最新更新