• 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

  • 相关阅读:
    Win7 SP1 安装SQL Server 2012时提示“此计算机上的操作系统不符合 SQL Server 2012的最低要求”
    ajax jsonp跨域
    Caused by: Unable to locate parent package [json-package] for [class com.you.action.ColumnAction]
    PHP MVC自己主动RBAC自己主动生成的访问路由
    Service与Activity与交流AIDL
    SVN常见错误两项纪录
    EL表达式语言
    oracle11g ASM(修复损坏的磁盘组头asm修复2)
    如何使用iOS 8 指纹识别,代码、示例
    EXCEL Pivot table manipulate
  • 原文地址:https://www.cnblogs.com/Amos-Turing/p/11698415.html
Copyright © 2020-2023  润新知