Oracle按年 月 日 周等統計資料

2021-09-14 00:25:58 字數 2972 閱讀 5887

在很多專案中都會有資料統計的功能,如按照年、月、周、日統計某個使用者提交的數量;或者直接統計指定年、月、周或者日新增的數量。最近我接觸的乙個專案,客戶就要求根據月和周統計每個單位提價提交的數量。

select 

o.id,

o.name,

to_char(a.create_date,'yyyy'),

count(*)

from news a

left join sys_user u on u.id = a.create_by

left join sys_office o on o.id = u.office_id

group by o.id,o.name,to_char(a.create_date,'yyyy')

這裡就是將建立時間格式化為年形式,按照單位id分組,查詢出提交的數量。

這裡直接將上面的的日期格式改為yyyy-mm形式即可。

按周統計可以顯示兩種效果,一種是顯示出該日期的周一的日期,也就是自然周的日期,另外一種是按周自然周統計。

select 

o.id,

o.name,

to_char(a.create_date,'ww'),

count(*)

from t_dzjg_news a

left join sys_user u on u.id = a.create_by

left join sys_office o on o.id = u.office_id

group by o.id,o.name,to_char(a.create_date,'ww')

這裡的ww是獲取該日期的在年中的第幾周。

這裡處理起來可以會比較繁瑣,首先要獲取日期的所在周的周一的日期,然後根據周一日期分組查詢:

---獲取指定日期的周一的日期

select trunc(sysdate,'ww') from dual;

select to_char(trunc(sysdate,'ww'),'yyyy-mm-dd') from dual;

---將建立時間格式為周一的形式,再去查詢

select

o.id,

to_char(trunc(a.create_date,'ww'),'yyyy-mm-dd') as 周一,

count(*)

from t_dzjg_news a

left join sys_user u on u.id = a.create_by

left join sys_office o on o.id = u.office_id

group by o.id,to_char(trunc(a.create_date,'ww'),'yyyy-mm-dd')

這裡使用到乙個函式trunc():該函式類似擷取函式,按指定的格式擷取輸入的資料。這裡將時間擷取為顯示周的形式。

在oracle中q為時間的季度如:

select to_char(sysdate,'q') from dual;--取得當前時間的季度
所以上面的sql可以改為:

select 

o.id,

to_char(a.create_date,'q') as 季度,

count(*)

from t_dzjg_news a

left join sys_user u on u.id = a.create_by

left join sys_office o on o.id = u.office_id

group by o.id, to_char(a.create_date,'q')

這個就幾乎沒啥好說的了:

select 

o.id,

to_char(a.create_date,'yyyy-mm-dd') as 日期,

count(*)

from t_dzjg_news a

left join sys_user u on u.id = a.create_by

left join sys_office o on o.id = u.office_id

group by o.id, to_char(a.create_date,'yyyy-mm-dd')

對於資料庫資料的統計,這些還只是很簡單基礎。這幾天通過寫那些統計功能,雖然寫的頭大,但是對資料庫知識越來越深。對於寫複雜的sql語句,要細分問題,一步步的查詢,最後將一步步分析的簡單的查詢組合成想要的複雜查詢,可以說是從小到大,切忌從大到小。

關於oracle資料庫中對時間常用的操作可以檢視我之前的一篇部落格:

oeacle常見的日期處理

SQL 按年,月,日統計相關函式

說明 統計每月下組織每天費用記錄 表 membermoney 字段 id 主鍵 使用者id varchar 50 onorgid 所在單位 varchar 50 realpay 金額 decimal 18,2 paydate 繳費時間 datetime addyear 年 int paymonth ...

實現統計的年,月,日

時間外掛程式用的mydate97,我用yii框架寫的 最終實現的結果為 如果選擇時間間隔在 30 天之內,則展示這三十天中每天的資料,如果時間間隔 大於30天小於2年,則展示的是以月份為單位的資料,如果時間間隔大於兩年,展示的是以年份為單位的資料。以下為封裝的方法,之前用highchars做的統計 ...

mongdb分組 年月日周

project 顯示哪幾個字段,這裡顯示createtime欄位,and.as是把and後的字段重新命名為as後的字段,這裡把createtime處理後重新命名為date group 分組操作,這裡按date分組,計算數量,結果數量重新命名為count 第二個project previousoper...