SELECT EXTRACT(DOW FROM CURRENT_DATE); 執行結果如下。
這個SQL語句的意思就是計算當前日期是一周中的第幾天。
EXTRACT(DOW FROM CURRENT_DATE) 函數的返回值,0表示星期天,6表示星期六。
因為外國人的習慣是一周從周日開始,二我們中國人的習慣一周的開始是星期一。
下面我們就來講一下按周統計的思路,如果我們能夠將表中的時間字段,都改造成對應時間的周一時間。那我們就可以實現。
示例。那我們只需要按這個日期分組統計就可以實現按周統計。
例如今天2019-01-11,是星期五,我么把他變成對應這周星期一的時間2018-01-07
同樣2019-01-10,星期四,改成對應的周一時間2018-01-07。依次將所有日期改造,就可以實現按周統計
那么如何將日期字段,改造成對應周一時間就是一個問題。
以上我們通過 EXTRACT(DOW FROM CURRENT_DATE)可以知道當前時間對應在一周找那個的天數。如果我們能夠用對應時間往前推他在一周的天數。例如今天2019-01-11號星期五,如果我們把時間往前推4天,我就可以得到對應這天周一的天數,首先我們需要改造一下EXTRACT(DOW FROM CURRENT_DATE)函數,以適應我們國人周一為一周的開始。
SELECT (EXTRACT(DOW FROM CURRENT_DATE)-1) diffday; 明顯周一與周五之間相差4天。我們用當前日期往前推4天便得到星期一的日期
SELECT CURRENT_DATE-(EXTRACT(DOW FROM CURRENT_DATE)-1||'day')::interval diffday;
2019-01-07便是星期一的日器。下面我們一表為基礎實現
一共6條數據,我們統計每周的數量
select
row_time::DATE-(extract(dow from row_time::TIMESTAMP)-1||'day')::interval monday,
count(*) amount
from acd_details
where 1=1
GROUP BY row_time::DATE-(extract(dow from row_time::TIMESTAMP)-1||'day')::interval
下面看一下上面語句的執行效果
顯示的日期為每周周一的時間,總共六條數據,第一周(2018-12-31-2019-01-06) 3條
第二周(2019-01-07-2019-01-13) 2條,第三周(2019-01-14-2019-01-20) 1條。,至此大功告成。
————————————————
原文鏈接:https://blog.csdn.net/weixin_42324471/article/details/86293504