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中实现按周统计详解的更多相关文章

  1. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  2. Linux中/proc目录下文件详解(转贴)

      转载:http://www.sudu.cn/info/index.php?op=article&id=302529   Linux中/proc目录下文件详解(一) 声明:可以自由转载本文, ...

  3. Delphi中的线程类 - TThread详解

    Delphi中的线程类 - TThread详解 2011年06月27日 星期一 20:28 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本 ...

  4. Nmap在实战中的高级用法(详解)

    @ 目录 Nmap在实战中的高级用法(详解) Nmap简单的扫描方式: 一.Nmap高级选项 1.查看本地路由与接口 2.指定网口与IP地址 3.定制探测包 二.Nmap扫描防火墙 1.SYN扫描 2 ...

  5. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  6. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  7. 批处理中的echo命令图文详解

    批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...

  8. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  9. SVN中tag branch trunk用法详解

    SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...

随机推荐

  1. [19/05/16-星期四] HTML_body标签(表格标签)

    一.概念 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  2. spring aop实现数据库的读写分离

    为了减轻数据库的压力,一般会使用数据库主从(master/slave)的方式,但是这种方式会给应用程序带来一定的麻烦,比如说,应用程序如何做到把数据写到master库,而读取数据的时候,从slave库 ...

  3. Gradle Could not find method leftShift() for arguments

    task hello << { println 'Hello world!' } 其中 << 在gradle 在5.1 之后废弃了 可以查看gradle 版本号 gradle ...

  4. django信号相关

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 Model signals pre_in ...

  5. JQ的异步文件上传

    一,view代码 <form role="form"> <div class="form-group"> <label for=& ...

  6. Js中className的用法

    className可以用来改变标签元素的css类选择器,从而改变元素的样式 举个栗子 一个简单的无序列表,点击button之前ul的样式为uhh1 点击button后,调用check函数中的class ...

  7. Git命令——提交、查看、后退、前进

    Git常用命令 1. 命令git init把这个目录变成Git可以管理的仓库: 2. 命令git commit把文件提交到仓库 这里需要注意的是,Git只能跟踪文本文件的改动,如txt文件,网页,所有 ...

  8. lvm分区创建和扩容

    shell> fdisk /dev/xvdb #### 选择磁盘 Command (m for help): m #### 帮助 Command action a toggle a bootab ...

  9. vue2.0 之 nextTick

    Vue.nextTick 将回调延迟到下次 DOM 更新循环之后执行.在修改数据之后立即使用它,然后等待 DOM 更新. 它跟实例方法vm.$nextTick() 一样,不同的是 this 自动绑定到 ...

  10. k8s源码编译

    1.可在github上面直接下载源码 2.下载所需要的docker镜像,并打上tag,不知道tag,可以先编译一下,会提示所需image. docker pull index.alauda.cn/xu ...