码迷,mamicode.com
首页 > 数据库 > 详细

postgresql中实现按周统计详解

时间:2019-10-18 15:49:51      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:就是   article   结果   第一周   time   意思   das   函数   二周   

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

postgresql中实现按周统计详解

标签:就是   article   结果   第一周   time   意思   das   函数   二周   

原文地址:https://www.cnblogs.com/Amos-Turing/p/11698415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!