GROUP BY TO_CHAR(ORDER_DATE,'YYYYMMDD')是按order_date的年月日是否相同做日期分組,你那代碼執(zhí)行有什么錯(cuò)誤嗎
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),克井企業(yè)網(wǎng)站建設(shè),克井品牌網(wǎng)站建設(shè),網(wǎng)站定制,克井網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,克井網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
年:
group by to_char(to_date(sysdate, 'yyyy-mm-dd hh24:mi:ss'),'yyyy');
月:
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');
日:
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');
時(shí):
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;
case when吧
select?sum(case?when?時(shí)間?between?'01:01'?and?'03:00'?then?統(tǒng)計(jì)字段?else?0?end)?"1-3點(diǎn)",
sum(case?when?時(shí)間?between?'03:01'?and?'05:00'?then?統(tǒng)計(jì)字段?else?0?end)?"3-5點(diǎn)"
from?表名
舉例了兩個(gè)時(shí)間段,其他的自己寫吧,有問(wèn)題追問(wèn)。
select distinct to_char(dt, 'yyyy-mm-dd') as years,to_char(dt, 'iw') as week
from (select (to_date('2013-4-15', 'yyyy-mm-dd') + rownum - 1) dtfrom dual connect by rownum = to_date('2013-7-15', 'yyyy-mm-dd') -to_date('2013-4-15', 'yyyy-mm-dd'))
group by to_char(dt, 'iw')
ORDER BY years,week
Oracle按不同時(shí)間分組統(tǒng)計(jì)的sql
如下表table1:
日期(exportDate)
數(shù)量(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
注意:為了顯示更直觀,如下查詢已皆按相應(yīng)分組排序
1.按年份分組
select
to_char(exportDate,'yyyy'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy');
年份
數(shù)量
-----------------------------
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');
月份
數(shù)量
-----------------------------
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
table1
group
by
to_char(exportDate,'yyyy-Q')
order
by
to_char(exportDate,'yyyy-Q');
季度
數(shù)量
------------------------------
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');
周
數(shù)量
------------------------------
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按時(shí)間段分組統(tǒng)計(jì)
想要按時(shí)間段分組查詢,首先要了解level,connect
by,oracle時(shí)間的加減.
關(guān)于level這里不多說(shuō),我只寫出一個(gè)查詢語(yǔ)句:
----level
是一個(gè)偽例
select
level
from
dual
connect
by
level
=10
---結(jié)果:
1
2
3
4
5
6
7
8
9
10
oracle時(shí)間的加減看看試一下以下sql語(yǔ)句就會(huì)知道:
select
sysdate
-1
from
dual
----結(jié)果減一天,也就24小時(shí)
select
sysdate-(1/2)
from
dual
-----結(jié)果減去半天,也就12小時(shí)
select
sysdate-(1/24)
from
dual
-----結(jié)果減去1
小時(shí)
select
sysdate-((1/24)/12)
from
dual
----結(jié)果減去5分鐘
select
sydate-(level-1)
from
dual
connect
by
level=10
---結(jié)果是10間隔1天的時(shí)間
下面是本次例子:
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得到的是一個(gè)間隔是2天的時(shí)間
group
by
d.dt
也就是兩天的時(shí)間間隔分組查詢
自己實(shí)現(xiàn)例子:
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
--從第一條時(shí)間記錄開始(sysdate-13)為表中的最早的日期,“34”出現(xiàn)的分組數(shù)(一天按每六個(gè)小時(shí)分組
就應(yīng)該為4)
一下是按照每6個(gè)小時(shí)分組
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
另外一個(gè)方法:
--按六小時(shí)分組
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小時(shí)分組
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)
有個(gè)問(wèn)題,要不要精確到時(shí)間,比如再有一條記錄為13:05他與12:08的時(shí)間沒(méi)有到達(dá)一小時(shí),可是如果直接按照小時(shí)排序的話,這就是一個(gè)新的序列。如果需要精確到分鐘并且以每個(gè)用戶的第一個(gè)時(shí)間為準(zhǔn),那就有難度了,因?yàn)橐袛嗝總€(gè)的開始和結(jié)束時(shí)間進(jìn)行分組。,而且每一行都要去判斷。假設(shè),每59分操作一次,那么這一天都是一個(gè)分組。
如果不用那么麻煩,直接就是按照小時(shí)分組,那么
select 用戶,時(shí)間,rank()over(partition by 用戶,substr(時(shí)間) order by 時(shí)間) from table
我不知道你的時(shí)間字段是怎么格式,所以直接寫的substr可能還需要轉(zhuǎn)化和具體的截取。這里只是寫了一個(gè)大概的樣子