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函數