Oracle 取过去一个小时每分钟的数据应该如何写sql?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 取过去一个小时每分钟的数据应该如何写sql?相关的知识,希望对你有一定的参考价值。

我现在有一张表A,里面有一个字段是time字段,插入一条数据的时候都会带有time字段,time字段的格式为2015/11/25 5:29:58,现在需要统计每分钟有多少条数据插入,应该如何去写?需要统计过去一个小时每分钟,如果没有插入数据则为0,谢谢。

写个例子吧

创建表、插入数据:

create table a
(time date);

insert into a values (to_date(20151208150101,\'yyyymmddhh24miss\'));

执行:

with t as
(select rownum rn from dual connect by rownum<=60)
select t.rn-1 rn,sum(case when t.rn-1=to_char(a.time,\'mi\') then 1 else 0 end) from t left join a on t.rn=to_char(a.time,\'mi\') and to_char(a.time,\'yyyy-mm-dd hh24:mi:ss\') between 
\'2015-12-08 15:00:00\' and \'2015-12-08 15:59:59\'
group by t.rn
order by t.rn

结果:

其中rn代表分钟数

参考技术A

思路: 按照分钟进行分组统计,如果需要统计之前1个小时,再加入where条件即可。

下面是按照分钟分组的sql:

SELECT 
        count(*)
FROM  A
WHERE time>= sysdate - 1/24
GROUP BY to_char(time ,'yyyymmdd hh24:mi');

当然这个也可以变异为按每小时,每天,每月统计插入多少条数据,只需要修改日期格式即可。
实测是可行的,请楼主结贴给分。

本回答被提问者采纳
参考技术B select mi_time,count(*)

from
(
select col1,col2,col3,col4.., to_char(time,'mi') mi_time)
from t
where time>sysdate -1/24
)
group by mi_time
参考技术C select count(*) from A where time>= sysdate-1/24

SQL如何取时间字段的小时和分钟

可用函数datename 返回代表指定时间字段的小时和分钟。SELECT datename(Hour Hh h, '2017-10-15 10:30:00') --返回:10,即10小时。SELECT datename(Minute Mi n, '2017-10-15 10:30:00') --返回:30,即30分钟。

拓展资料:

1、SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

2、SQL语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言作为数据输入与管理的接口。SQL语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。

参考技术A tstDate.Text
=
DateTime.Now()
'当地时间
tstWeek.Text
=
DateTime.Now.DayOfWeek.ToString()
'星期
tstWeek.Text
=
DateTime.Now.DayOfYear.ToString()
'年份
tstWeek.Text
=
DateTime.Now.Hour.ToString()
'小时
就用这个函数就搞定了。DateTime
参考技术B datename
返回代表指定时间字段的小时和分钟:
SELECT
datename(Hour
Hh
h,
'2004-10-15
10:30:00')
--返回:10
SELECT
datename(Minute
Mi
n,
'2004-10-15
10:30:00')
--返回:30
函数
参数/功能
GetDate(
)
--返回系统目前的日期与时间
DateDiff
(interval,date1,date2)
--以interval
指定的方式,返回date2
与date1两个日期之间的差值
date2-date1
DateAdd
(interval,number,date)
--以interval指定的方式,加上number之后的日期
DatePart
(interval,date)
---返回日期date中,interval指定部分所对应的整数值
DateName
(interval,date)
--返回日期date中,interval指定部分所对应的字符串名称
参数
interval的设定值如下:


写(Sql
Server)
Access

ASP
说明
Year
Yy
yyyy

1753
~
9999
Quarter
Qq
q

1
~
4
Month
Mm
m
月1
~
12
Day
of
year
Dy
y
一年的日数,一年中的第几日
1-366
Day
Dd
d
日,1-31
Weekday
Dw
w
一周的日数,一周中的第几日
1-7
Week
Wk
ww
周,一年中的第几周
0
~
51
Hour
Hh
h
时0
~
23
Minute
Mi
n
分钟0
~
59
Second
Ss
s

0
~
59
Millisecond
Ms
-
毫秒
0
~
999
参考技术C http://hi.baidu.com/az44yao/blog/item/e15efec4bcf3d6af8326ac60.html
这里比较全了,看看吧
-----------------补充---------------



说明
Year
Yy

1753
~
9999
Quarter
Qq

1
~
4
Month
Mm
月1
~
12
Day
Dd
日,1-31
Weekday
Dw
一周的日数,一周中的第几日
1-7
Week
Wk
周,一年中的第几周
0
~
51
Hour
Hh
时0
~
23
Minute
Mi
分钟0
~
59
Second
Ss

0
~
59
Millisecond
Ms
毫秒
0
~
999
Hour
Hh
时0
~
23
Minute
Mi
分钟0
~
59
Second
Ss

0
~
59
这几个不就是时分秒吗?

以上是关于Oracle 取过去一个小时每分钟的数据应该如何写sql?的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何取时间字段的小时和分钟

如果我得到 15 分钟的间隔数据来预测每小时目标,我应该使用 15 分钟的数据还是聚合到 1 小时的数据进行训练?

在 Oracle SQL 中按时间间隔聚合数据

使用oracle,如何做到某个时间段内每间隔1分钟查询出一条记录?

oracle按每个10分钟进行分组展示数据

oracle 语句取时间(times)字段 加5分钟 大于等于当前系统时间的语句怎么写