ORACLE - 按十分钟分组

ORACLE - Group By Ten Minutes

我的 table 中有一个 time_part 列,其时间格式类似于 13:24 。我想每 10 分钟按 time_part 分组。如何按 10 分钟对时间进行分组。

这里是查询:

SELECT substr(tran_time, 1, 2) || ':' || substr(tran_time, 3, 2) as time_part, recon_date

这是我的 table 和 tran_time 是='hhmmss' :

time_part  tran_time recon_date  data
10:14      101425   13/12/2015   a
22:29      222939   13/12/2015   b
22:23      222342   13/12/2015   x
00:46      004615   13/12/2015   d
16:22      162259   13/12/2015   e
12:13      121344   13/12/2015   f
12:14      121410   13/12/2015   g
12:10      121008   13/12/2015   b
21:17      211732   13/12/2015   f
20:25      202511   13/12/2015   r

示例输出应该是这样的

trantime   count(*)
000101     5
001101     4
002101     13
.
.
.
230101     5
231101     23

在导出的 table 中提取小时加 10 分钟的部分。然后在外层做 GROUP BY table:

select 10_min_part, count(*)
from
(
 SELECT substr(tran_time, 1, 3) as 10_min_part
 from tablename
) dt
group by 10_min_part

在 SELECT 列表中,您可以将 001 连接到 10_min_part。 (现在我不记得 Oracle 是怎么做到的...)

  • 首先,将时间部分单独存储为字符串.

    是一个糟糕的设计
  • 其次,DATE 总是同时包含日期和时间元素。您需要做的就是在需要时使用 TO_CHAR 和所需的 格式模型 .[= 从日期中提取时间部分14=]

在你的评论中,,意思是,recon_date既有日期元素,也有时间元素。因此,您不需要 SUBSTR,只需在日期列上使用 TO_CHAR

SELECT TO_CHAR(recon_date, 'mi'), COUNT(*) 
FROM your_table
GROUP BY TO_CHAR(recon_date, 'mi');