取值為0~6,對應(yīng)星期一到星期日,每周以星期一為第一天
成都創(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ò)營銷,網(wǎng)絡(luò)優(yōu)化,煙臺網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
取值為1~7,對應(yīng)星期日到星期六,每周以星期日為第一天
取值為Sunday~Saturday,對應(yīng)星期日到星期六,第一天是星期日;
該函數(shù)與參數(shù)lc_time_names有關(guān),如果設(shè)置此參數(shù)值為"zh_CN",則得到對應(yīng)的中文名稱“星期日”~“星期六”
示例:
2017-01-02是星期一,使用這三個(gè)函數(shù)分別得到的是0,2,Monday
修改lc_time_names參數(shù)后,得到中文名稱:
該函數(shù)用于獲取日期是年度中的第幾周。該函數(shù)比較復(fù)雜,使用不同的mode,得到不同的結(jié)果。見下表:
例如,mode值為1,則每周的第一天為周一,week()函數(shù)的結(jié)果為0~53,如果第一個(gè)周天數(shù)少于4,則記為第0周,如果第一個(gè)周天數(shù)大于等于4,則記為第1周。
再如,mode值為2,則每周第一天為周日,week()函數(shù)的結(jié)果為1~53,如果第一個(gè)周里包含了周日,則記為第1周,如果第一個(gè)周里沒有周日,則記為上一年度的最后一周。
實(shí)際上,這個(gè)參數(shù)主要是為了解決跨年的周該如何歸屬的問題,是算作本年度的第一周,還是上一年度的最后一周,又或者是算作第0周。這需要根據(jù)使用場景和習(xí)慣來選擇。
但不管怎么歸屬,week函數(shù)本身的取值范圍有限,所以再跨年的時(shí)間區(qū)間一般不用此函數(shù)(后邊舉例說明)。
參考:
假設(shè)我們有一張銷售表,內(nèi)容如下:
現(xiàn)在,我們要統(tǒng)計(jì)每周的銷售額。
首先想到的是用week函數(shù),計(jì)算日期對應(yīng)的周數(shù),然后按照這個(gè)周數(shù)來進(jìn)行分組求和:
如果能保證這個(gè)日期區(qū)間是在一個(gè)年度內(nèi)的,那么用week函數(shù)完全沒有問題。
很不幸的是,通常日期區(qū)間是跨年的,例如我們這個(gè)示例中的數(shù)據(jù),恰好有跨年的周,2010-12-31日是第52周,2011-01-01變成了2011年度的第0周,而實(shí)際上這兩天是在同一周。
要解決這個(gè)問題,我們不能指望week函數(shù),因?yàn)樵摵瘮?shù)的返回結(jié)果總是在0~53循環(huán),我們需要找一個(gè)固定時(shí)間為第一周,之后的周數(shù)累加而非循環(huán)。
例如,我們選擇2010-01-03為第一周的第一天,之后的任意一天201x-xx-xx距離2010-01-03的天數(shù)/7記為周數(shù),得到結(jié)果如下:
以上解決方案中,我們選擇2010-01-03為起始日期,因?yàn)樗x我們要統(tǒng)計(jì)的時(shí)間足夠遠(yuǎn),同時(shí)它是星期日(我們認(rèn)為周日是一周的第一天)。
如果我們需要把星期一當(dāng)作第一天,只需要改為2010-01-04即可。
select? 關(guān)鍵字,count(第一周),count(第二周),count(第三周),count(第四周) from TableName??group?by??關(guān)鍵字
易客CRM之前的版本中有一個(gè)報(bào)表是按月統(tǒng)計(jì)銷售情況,最近有個(gè)客戶想按周統(tǒng)計(jì)銷售情況。按月統(tǒng)計(jì)的Sql語句比較好寫,sql語句如下:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%Y-%m’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,也就是把duedate日期以月的形式顯示,然后groupby,那么按周如何統(tǒng)計(jì)呢?
搜了一下mysql的manual,在這里找到一個(gè)解決方法,通過mysql的week函數(shù)來做,sql語句如下:SELECT WEEK(ec_salesorder.duedate) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,這個(gè)方法有個(gè)缺陷,不能顯示年份,僅僅靠一個(gè)周數(shù)不方便查看統(tǒng)計(jì)信息。
繼續(xù)研究mysql manual,在DATE_FORMAT函數(shù)介紹發(fā)現(xiàn)2個(gè)格式符和周有點(diǎn)關(guān)系:
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
把上面的Sql語句中改成:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%x %v’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
顯示的結(jié)果如下:
m total so_count
2009 11 10000.00 3
2009 12 44000.00 5
如果周日為一周的第一天,那么sql語句應(yīng)該為:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%X %V’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
結(jié)果應(yīng)該沒錯(cuò),不出意外,易客CRM下個(gè)版本將增加按周統(tǒng)計(jì)銷售情況的報(bào)表。
假設(shè)你的表為 ta 日期字段是 dt
那么,以 2015-01-01為起始日,每5天累總計(jì)數(shù)為:
select datediff(dt, '2015-01-01') div 5 as d5 , count(*)
from ta
group by (datediff(dt, '2015-01-01') div 5)
網(wǎng)站名稱:mysql按周統(tǒng)計(jì)怎么做的簡單介紹
本文來源:http://muchs.cn/article32/doeocpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、面包屑導(dǎo)航、App開發(fā)、關(guān)鍵詞優(yōu)化、營銷型網(wǎng)站建設(shè)、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)