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