Oracle 查询以获取月份数据并为不可用的月份提供 0
Posted
技术标签:
【中文标题】Oracle 查询以获取月份数据并为不可用的月份提供 0【英文标题】:Oracle query to get month wise data and give 0 for month not available 【发布时间】:2014-06-09 10:47:50 【问题描述】:以下是我的表格数据
time_stamp Name
01-Mar-14 a
02-Mar-14 b
02-Mar-14 c
01-May-14 d
02-May-14 e
01-Jun-14 f
需要输出:
(3,0,2,1) (Month wise count with 0 if month doesn't exist)
我创建了以下查询:
select
listagg(count(1),',') within group (order by EXTRACT(month FROM time_stamp))
from ps_bqueues_host
where time_stamp BETWEEN TO_DATE('01-Mar-14', 'DD-Mon-YY') and
TO_DATE('01-Jun-14', 'DD-Mon-YY') GROUP BY EXTRACT(month FROM time_stamp)
这给了我输出:
(3,2,1) (Month of Apr with 0 is not there).
请建议如何按所有月份分组。
谢谢。
【问题讨论】:
您需要加入一个包含所有月份范围的子选择表。然后显示按所有列出的月份分组的计数(time_stamp)。在这里,您可以看到如何使用月份填充子选择表的示例:***.com/questions/4375897/connected-by-months 或 ***.com/questions/4644562/… 【参考方案1】:您应该将这个原始表与给定期间所有月份的表连接起来。如果是一年内,那么we need 1,2,3,...12 sequence。
select
listagg(count(Name),',') within
group (order by m.rn)
from
(SELECT * FROM ps_bqueues_host
where time_stamp
BETWEEN TO_DATE('01-Mar-14', 'DD-Mon-YY')
and TO_DATE('01-Jun-14', 'DD-Mon-YY')
)
RIGHT JOIN
(SELECT LEVEL rn FROM dual CONNECT BY LEVEL <= 12) m
ON m.rn=EXTRACT(month FROM time_stamp)
WHERE m.rn BETWEEN EXTRACT(month FROM TO_DATE('01-Mar-14', 'DD-Mon-YY'))
AND EXTRACT(month FROM TO_DATE('01-Jun-14', 'DD-Mon-YY'))
GROUP BY m.rn
SQLFiddle demo
【讨论】:
感谢您的帮助,但输出不正确。使用您的查询,输出为 (0,0,7050,0)。但是,使用以下查询,月数可能为 5274: select count(time_stamp) from ps_bqueues_host where time_stamp BETWEEN TO_DATE('01-May-14', 'DD-Mon-YY') and TO_DATE('31-May- 14','DD-Mon-YY')。预期结果为 (0,0,5274,0) time_stamp 字段是否包含时间部分?如果是这样,那么您的查询不计算 31.05.2014 的最新日期尝试使用and TO_DATE('01-Jun-14', 'DD-Mon-YY')
而不是 31 May 2014
。
没错。 '01-Jun-14' 工作。请建议如何处理?我的意思是有没有办法在不查询到第二天的情况下也包含最后一天的数据?
这是因为31-May-2014 23:00:01
> '31-May-2014'。您应该添加一天,例如 ...and TO_DATE('31-May-14', 'DD-Mon-YY')+1
或添加时间 ..and To_date('31-May-2014 23:59:59','mm-Mon-yy hh24:mi:ss')
我选择了 To_date('31-May-2014 23:59:59','mm-Mon-yy hh24:mi:ss') 并且它有效。感谢您的帮助!以上是关于Oracle 查询以获取月份数据并为不可用的月份提供 0的主要内容,如果未能解决你的问题,请参考以下文章
Oracle sql developer 日期/月份数据提取查询和语法