图表在24小时内返回聚合值

时间:2013-07-16 20:48:49

标签: sql oracle oracle-apex

我要求在Apex 4.1中构建条形图,该条形图将在24小时内计算所有操作实例并显示按小时分组的数据。 条形图查询基于三个字段。

Select '' link, to_char(created_on,HH) label, count(id) value from mytable1
where created_on like IN (SELECT LEVEL-1 FROM DUAL CONNECT BY LEVEL <= 24;)

不需要链接,标签将是每小时所以00,01,02,03,04,... 23和值将是count(id)表一有名为created_on的列,它捕获时间戳。我通过执行to_char(created_on,HH)捕获小时值。但是此查询将仅导致发生(存在)的事件,因此如果在10处没有ID,那么在那段时间内将没有结果。我需要某种包含在该查询上的包装机制,它将从0到23计数。

任何有关构建查询或指导我执行函数的帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

此查询将创建一个1-24的计数器表,我非常确定它适用于10g:

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 24;

要获得0-23的计数器表,只需从LEVEL中减去1:

SELECT LEVEL-1 FROM DUAL CONNECT BY LEVEL <= 24;

使用以上作为&#34; main&#34;表格和LEFT JOIN到您的表格:

SELECT
 whatever AS link,
 Ctr.HourValue AS label,
 COUNT(id) AS value
FROM
 (SELECT LEVEL-1 AS HourValue
  FROM DUAL
  CONNECT BY LEVEL <= 24) Ctr
LEFT JOIN mytable1 ON ctr.HourValue = TO_CHAR(mytable1.created_on, 'HH24')
WHERE <whatever>
GROUP BY whatever, Ctr.HourValue

注意:

  • 您需要使用HH24格式代码,因为HH使用12小时制。
  • 您还可以使用EXTRACT功能数小时:... ON ctr.HourValue = EXTRACT(HOUR FROM mytable1.created_on)。我发现这更具可读性,但这是主观的。没有&#34;最好的方式&#34;因此,请使用您喜欢的内容 - 您是那些不能维持查询的人:)