oracle根据时间每五分钟统计表

工作需要统计oracle中两个交易表(trade1,trade2)一天中每五分钟内的交易条数,表中都有一个time字段精确到秒,现在要根据这个字段统计表中每五分钟的交易条数,24个小时分统计288次,请问这段逻辑怎么写?新人求指教!
输出形式:
trade1: 1,2,3,4,5....288 拼接 trade2:1,2,3,4,5...288

PLSQL创建Oracle定时任务

https://www.cnblogs.com/yx007/p/6519544.html

关键思路,把时间单位秒转换为每5分钟为一分组:

SELECT (time/300) * 300, COUNT(\*)
.....
GROUP BY time/300

select 't1',trunc(time),ceil((trunc(time,'mi')-trunc(time))*288),count(*)
from trade1
group by 't1',trunc(time),ceil((trunc(time,'mi')-trunc(time))*288)
union all
select 't2',trunc(time),ceil((trunc(time,'mi')-trunc(time))*288),count(*)
from trunc(time),trade2
group by 't2',trunc(time),ceil((trunc(time,'mi')-trunc(time))*288)

这个绝对是你要的,每天都会有1-288个分段,你自己价格日期制定某一天即可,两个集合联合不知是否你的最终目的

表源 日期 1-288分钟段 记录数

t1 2019/3/31 277 1
t1 2019/3/31 194 1
t2 2019/3/31 246 1
t2 2019/3/31 178 1
t2 2019/3/31 115 1
t1 2019/4/1 98 1
t1 2019/4/1 214 1
t2 2019/4/1 149 1
t2 2019/4/1 101 1
采用ceil函数好处在于第0至第5分钟在第一个5分钟段
floor肯定就成0了,不合适
288和 *24*60/5 等价
count(
)可以换成你的表里具体列的sum()效果更好

要求是执行完sql就要出结果吗?能用程序处理吗?

select trunc(time),ceil(((time-trunc(time))*24*60)/5),count(*)
from trade1
group by trunc(time),ceil(((time-trunc(time))*24*60)/5)

既然说“表中都有一个time字段精确到秒”,那就应该只是date类型字段,而不是timestamp类型字段(精确到毫秒)。
设定这字段名为recdatetime。
1. 获取虚拟列或计算列或视图列secondtime,SELECT TO_NUMBER(TO_DATE('2015-01-01 05:00:00', 'YYYY-MM-DD HH24:MI:SS')

  • TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 as secondtime
  • select secondtime/5 as period , count(*) as treatcount from trade1 group by secondtime/5