Oracle数据库按时间进行分组统计数据的方法Oracle按不同时间分组统计oracle日期怎么分组的sql
如下表table1:
日期(exportDate)
数量(amount)
--------------
-----------
14-2月
-08
20
10-3月
-08
2
14-4月
-08
6
14-6月
-08
75
24-10月-09
23
14-11月-09
45
04-8月
-10
5
04-9月
-10
44
04-10月-10
88
注意:为oracle日期怎么分组了显示更直观oracle日期怎么分组,如下查询已皆按相应分组排序
1.按年份分组
select
to_char(exportDate,'yyyy'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy');
年份
数量
-----------------------------
2009
68
2010
137
2008
103
2.按月份分组
select
to_char(exportDate,'yyyy-mm'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy-mm')
order
by
to_char(exportDate,'yyyy-mm');
月份
数量
-----------------------------
2008-02
20
2008-03
2
2008-04
6
2008-06
75
2009-10
23
2009-11
45
2010-08
5
2010-09
44
2010-10
88
3.按季度分组
select
to_char(exportDate,'yyyy-Q'),sum(amount)
from
【oracle日期怎么分组 oracle group by 日期】table1
group
by
to_char(exportDate,'yyyy-Q')
order
by
to_char(exportDate,'yyyy-Q');
季度
数量
------------------------------
2008-1
22
2008-2
81
2009-4
68
2010-3
49
2010-4
88
4.按周分组
select
to_char(exportDate,'yyyy-IW'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy-IW')
order
by
to_char(exportDate,'yyyy-IW');
周
数量
------------------------------
2008-07
20
2008-11
2
2008-16
6
2008-24
75
2009-43
23
2009-46
45
2010-31
5
2010-35
44
2010-40
88
PS:Oracle按时间段分组统计
想要按时间段分组查询,首先要了解level,connect
by,oracle时间的加减.
关于level这里不多说,我只写出一个查询语句:
----level
是一个伪例
select
level
from
dual
connect
by
level
=10
---结果:
1
2
3
4
5
6
7
8
9
10
oracle时间的加减看看试一下以下sql语句就会知道:
select
sysdate
-1
from
dual
----结果减一天,也就24小时
select
sysdate-(1/2)
from
dual
-----结果减去半天,也就12小时
select
sysdate-(1/24)
from
dual
-----结果减去1
小时
select
sysdate-((1/24)/12)
from
dual
----结果减去5分钟
select
sydate-(level-1)
from
dual
connect
by
level=10
---结果是10间隔1天的时间
下面是本次例子:
select
dt,
count(satisfy_degree)
as
num
from
T_DEMO
i
,
(select
sysdate
-
(level-1)
*
2
dt
from
dual
connect
by
level
=
10)
d
where
i.satisfy_degree='satisfy_1'
and
i.insert_timedt
and
i.insert_time
d.dt-2
group
by
d.dt
例子中的sysdate
-
(level-1)
*
2得到的是一个间隔是2天的时间
group
by
d.dt
也就是两天的时间间隔分组查询
自己实现例子:
create
table
A_HY_LOCATE1
(
MOBILE_NO
VARCHAR2(32),
LOCATE_TYPE
NUMBER(4),
AREA_NO
VARCHAR2(32),
CREATED_TIME
DATE,
AREA_NAME
VARCHAR2(512),
);
select
(sysdate-13)-(level-1)/4
from
dual
connect
by
level=34
--从第一条时间记录开始(sysdate-13)为表中的最早的日期,“34”出现的分组数(一天按每六个小时分组
就应该为4)
一下是按照每6个小时分组
select
mobile_no,area_name,max(created_time
),dt,
count(*)
as
num
from
a_hy_locate1
i
,
(select
(sysdate-13)-(level-1)/4
dt
from
dual
connect
by
level
=
34)
d
where
i.locate_type
=
1
and
i.created_timedt
and
i.created_time
d.dt-1/4
group
by
mobile_no,area_name,d.dt
另外一个方法:
--按六小时分组
select
trunc(to_number(to_char(created_time,
'hh24'))
/
6),count(*)
from
t_test
where
created_time
trunc(sysdate
-
40)
group
by
trunc(to_number(to_char(created_time,
'hh24'))
/
6)
--按12小时分组
select
trunc(to_number(to_char(created_time,
'hh24'))
/
6),count(*)
from
t_test
where
created_time
trunc(sysdate
-
40)
group
by
trunc(to_number(to_char(created_time,
'hh24'))
/
6)
oracle 时间字段是年月日时分秒怎么根据年月日分组年oracle日期怎么分组:
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyy')oracle日期怎么分组;
月oracle日期怎么分组:
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm');
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyymm');
日oracle日期怎么分组:
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd');
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyymmdd');
时:
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24');
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyymmddhh24');
分:
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi');
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyymmddhh24mi');
秒:
group by sysdate;
在oracle中,怎么把时间按每周分组啊,数据库中存的是一个固定的时间 , 请教各位大虾指点指点 。oracle的date时间类型是 '2011-7-30 14:31'这种形式
因此就算你用extract()或者to_char()截取时间段也没有没办法区分周
我建议的方法是新建一个字段week , 从时间里截取月和日去计算周,可以从每月的第一天00:00开始算,完成7天算一周 。
也就是说这个字段week下要有至少4条记录,分别是每一个月的第一二三四周 。
然后根据这个字段用 group by week 去分组就行了 。
oracle语句 根据操作时间分组有个问题,要不要精确到时间,比如再有一条记录为13:05他与12:08的时间没有到达一小时,可是如果直接按照小时排序的话,这就是一个新的序列 。如果需要精确到分钟并且以每个用户的第一个时间为准,那就有难度了,因为要判断每个的开始和结束时间进行分组 。,而且每一行都要去判断 。假设,每59分操作一次,那么这一天都是一个分组 。
如果不用那么麻烦,直接就是按照小时分组,那么
select 用户,时间 , rank()over(partition by 用户,substr(时间) order by 时间) from table
我不知道你的时间字段是怎么格式,所以直接写的substr可能还需要转化和具体的截取 。这里只是写了一个大概的样子
oracle如何按日期分组,底下的代码如何让它成功?GROUP BY TO_CHAR(ORDER_DATE,'YYYYMMDD')是按order_date的年月日是否相同做日期分组 , 你那代码执行有什么错误吗
oracle 时间段分组case when吧
select sum(case when 时间 between '01:01' and '03:00' then 统计字段 else 0 end) "1-3点",
sum(case when 时间 between '03:01' and '05:00' then 统计字段 else 0 end) "3-5点"
from 表名
举例了两个时间段,其他的自己写吧 , 有问题追问 。
关于oracle日期怎么分组和oracle group by 日期的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 大型飞行游戏手机,手游推荐一款非常好玩的手机飞行类游戏
- 学python还是学大数据,学大数据和python哪个好
- cpu烧了显示什么,什么游戏烧CPU
- 手机游戏枪战单机游戏,手机枪战单机游戏排行榜前十名
- oracle如何判断字段 oracle数据库判断字段长度
- u盘视频损坏怎么修复,u盘视频损坏怎么办
- cnbeta安卓版本,安卓10beta
- mysql大小写怎么设置 mysql转大写
- 如何学会做电商销售,怎样学会做电商