按時間分組統計的SQL語句
日期(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
注意:為了顯示更直觀,如下查詢已皆按相應分組排序
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 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
補充:
按季度分組還有個比較笨的方法(參考網路資源)
select to_char(exportDate,‘yyyy’),
sum(decode(to_char(exportDate,‘mm’),‘01’,amount,‘02’,amount,‘03’,amount,0)) as 第一季,
sum(decode(to_char(exportDate,‘mm’),‘04’,amount,‘05’,amount,‘06’,amount,0)) as 第二季,
sum(decode(to_char(exportDate,‘mm’),‘07’,amount,‘08’,amount,‘09’,amount,0)) as 第三季,
sum(decode(to_char(exportDate,‘mm’),‘10’,amount,‘11’,amount,‘12’,amount,0)) as 第四季
from table1
group by to_char(exportDate,‘yyyy’);
年份 第一季 第二季 第三季 第四季
--------------------------------------------------
2009 0 0 0 68
2010 0 0 49 88
2008 22 81 0 0
5:按時間段統計
按時間段分組顯示 。。。
比如有資料是
2010-8-13 09:46:05
2010-8-13 10:09:05
2010-8-13 10:46:05
按照每30分鐘分段統計,然後統計欄位顯示成10:00-10:30形式
SQL:
select to_char((trunc(sysdate)+trunc((motime-trunc(sysdate))*24*60/30)*30/60/24),'hh24:mi')||'-'||to_char((trunc(sysdate)+trunc((motime-trunc(sysdate))*24*60/30+1)*30/60/24),'hh24:mi') period, count(*) "total" from mo where trunc(motime)=to_date(&day,'yyyymmdd') group by to_char((trunc(sysdate)+trunc((motime-trunc(sysdate))*24*60/30)*30/60/24),'hh24:mi')||'-'||to_char((trunc(sysdate)+trunc((motime-trunc(sysdate))*24*60/30+1)*30/60/24),'hh24:mi') order by 1;
還可以使用connect by 和level來完成這個操作
這裡需要用connect by和level來共同構建當天內每分鐘的時間點。
select to_char(to_date(to_char(sysdate, 'yyyy-MM-dd') || ' 00:00:00','yyyy-MM-dd HH24:mi:ss') + (level / 24 / 60),'yyyy-MM-dd HH24:mi:ss') dt
from dual
connect by level <=
trunc((sysdate -to_date('2013-1-5 00:00:00', 'yyyy-MM-dd HH24:mi:ss')) * 24 * 60,0)
得到這樣的結果後,接下來的統計就簡單了很多,下面是統計每個時間點單據總數的sql:
select dt,
(select count(1)
from orderTest o
where o.create_time >
to_date(to_char(sysdate, 'yyyy-MM-dd') || ' 00:00:00',
'yyyy-MM-dd HH24:mi:ss')
and o.create_time <= to_date(d.dt, 'yyyy-MM-dd HH24:mi:ss')) n
from (select to_char(to_date(to_char(sysdate, 'yyyy-MM-dd') || ' 00:00:00',
'yyyy-MM-dd HH24:mi:ss') +
(level / 24 / 60),
'yyyy-MM-dd HH24:mi:ss') dt
from dual
connect by level <= trunc((sysdate -
to_date('2013-1-5 00:00:00',
'yyyy-MM-dd HH24:mi:ss')) * 24 * 60,
0)) d
統計的結果如下:
DT N
------------------- ----------
2013-01-05 00:01:00 0
2013-01-05 00:02:00 0
2013-01-05 00:03:00 0
2013-01-05 00:04:00 0
2013-01-05 00:05:00 0
2013-01-05 00:06:00 0
2013-01-05 00:07:00 0
2013-01-05 00:08:00 0
2013-01-05 00:09:00 0
2013-01-05 00:10:00 0
2013-01-05 00:11:00 0
2013-01-05 00:12:00 0
2013-01-05 00:13:00 0
2013-01-05 00:14:00 0
2013-01-05 00:15:00 0
2013-01-05 00:16:00 0
2013-01-05 00:17:00 0
2013-01-05 00:18:00 0
2013-01-05 00:19:00 0
2013-01-05 00:20:00 0
由於是凌晨的關係,所以統計出來的資料都是0。
上面寫的語句都是預設時間間隔是1分鐘的,如果你需要修改間隔時間,只需要修改下面兩處地方
select to_char(to_date(to_char(sysdate, 'yyyy-MM-dd') || ' 00:00:00',
'yyyy-MM-dd HH24:mi:ss') +
(level / 24 / 60 /*自定義時間間隔*/),
'yyyy-MM-dd HH24:mi:ss') dt
from dual
connect by level <= trunc((sysdate -
to_date('2013-1-5 00:00:00',
'yyyy-MM-dd HH24:mi:ss')) * 24 * 60/*自定義時間間隔*/,
0)
第一處地方需要除以間隔時間,第二處地方則是乘以間隔時間。
說到原理其實很簡單,先用系統當前時間減去今日的初始時間,減出來的天數*24*60就是分鐘數trunc之後就可以用做level了。
相關推薦
按時間分組統計的SQL語句
如下表table1: 日期(exportDate) 數量(amount) -------------- ----------- 14-2月 -08 2
Mysql資料庫裡面的String型別按照數字來排序以及按時間排序的sql語句
mysql時間格式化,按時間段查詢MYSQL語句 2011-04-15 09:01:08| 分類: MySQL |舉報 |字號 訂閱 描述:有一個會員表,有個birthday欄位,值為'YYYY-MM-DD'格式,現在要查詢一個時間段內過生日的會員,比如'06-03'到'07-08'這個時間段內所有過
java加mysql按時間條件查詢sql語句
java程式碼如下: Date date=new Date(); SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd"
SQL語句 按年齡段分組統計人數
create table #t(Uname varchar(10),age int) insert #t select '啊啊',19 union all select '資訊',23 union
各種按日期、時間段統計SQL語句
--前一日 select * from 表名 where datediff(d,cast(日期 as datetime),getdate())=1 --上週 select *
Mysql 根據時間戳按年月日分組統計(做個收藏)
create_time時間格式 SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks; SELECT DATE_FO
Mysql 根據時間戳、時間按年月日分組統計
下列修飾符可以被用在format字串中: %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語字首的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat
PHP mysql 按時間分組 表格table 跨度 rowspan
sele 時間 mode del select() code sel color distinct $cjrili_list = CjriliModel::select(); $cjrili_group = Db::q
mongodb按照時間分組統計
get text .com hour dateutil private sub agg pri 使用spring data mongodb v1.8需求1、數據結構如下。說明:改集合記錄的是公司各個系統的訪問情況(localPath表示系統,requestTime 表示請求
MySQL查詢時,將查詢時間更新為當前時間now()的sql語句寫法
ann 語句 author mysql查詢 使用 app 技術分享 select ima sql語句寫法: select a.id,a.title,a.doc_content,a.write_time,a.author,a.articletype,a.channelid,
Sqlite資料庫對時間進行比較SQL語句
開發工作,在於不斷積累,總結經驗,持續學習。 最近專案中有這樣的需求: 1、刪除當前月份前三個月訊息(如本月是10月刪除7、8、9三個月的訊息只儲存本月訊息)。 2、更新非本月訊息為已讀訊息(如本月為10月,1為已讀狀態,0為未讀狀態,10月的所有訊息狀態不變,非本月訊息狀態都為1)。
php 按時間分組
/* * 按當前的月份 查出 之前的月份 每個月份的月初時間戳和月末時間戳 */ // $y = date('Y',time()); // $m = date('m',time()); // for ($i=1;$i<=$m;$i++){ // //
mongodb 計算季度 & 按季度分組統計
計算季度: db.task.aggregate([{ $match: { "createDate": {$ne: null} } }, { $project: { status: 1, createDate: 1, qu
mongodb aggregate按日期分組統計及spring mongo實現
如需轉載請註明出處: mongodb aggregate按日期分組統計及spring mongo實現 實現的需求 傳入毫秒級開始時間戳和結束的時間戳,根據當前狀態currentStatus.status和當前狀態時間currentStatus.datetime進行按日統計,缺少數
Oracle 按時間段分組統計 (使用LEVEL)
想要按時間段分組查詢,首先要了解level,connect by,oracle時間的加減. 關於level這裡不多說,我只寫出一個查詢語句: ---level 是一個偽例 selectlevelfrom dual connectbylevel <=10 ---結果:1 2
記錄一個mysql按日期分組統計的查詢
SELECT DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * ) FROM testGROUP BY DATE_FORMAT( deteline, "%Y-%m-%d %H" ) 查詢某天: deteline, "%Y
學生各門課程成績統計SQL語句大全(面試題)
http://www.cnblogs.com/lsgcoder101/p/6011059.html 建立表 SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE
MYSQL關於時間日期的sql語句
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; -> 1998-01-01 00:00:00 mysql> SELECT INTERVAL 1 DAY
Oracle 按時間段分組統計
想要按時間段分組查詢,首先要了解level,connect by,oracle時間的加減. 關於level這裡不多說,我只寫出一個查詢語句: ---level 是一個偽例 select level from dual connect by level <=1
按 host 分組統計檢視 | 全方位認識 sys 系統庫
在上一篇《配置表|全方位認識 sys 系統庫》中,我們介紹了sys 系統庫的配置表,但實際上我們大部分人大多數時候並不需要去修改配置表,直接使用sys 系統庫下的檢視來獲取所需的資料即可,sys 系統庫下一共有100多檢視,這些檢視都能夠給我們提供一些什麼樣的資訊呢?本期的內