postgresql中實現按周統計詳解

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

相關文章
相關標籤/搜索