-1

我需要在 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 的查询的包装机制。

对于构建该查询或将我引导至我需要的功能的任何帮助,我将不胜感激。

4

1 回答 1

2

这个查询将创建一个从 1 到 24 的计数器表,我很确定它适用于 10g:

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 24;

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

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

使用上面的作为你的“主”表和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). 我觉得这更具可读性,但这是主观的。没有“最佳方式”,所以请使用您喜欢的方式 - 您将被困在维护查询中:)
于 2013-07-16T21:03:10.650 回答