zoukankan      html  css  js  c++  java
  • sql-一段连续日期的数据查询

    后台sql实现如下图的数据支撑(图横坐标数据要求为今天的前一天往前一个月的,纵坐标为对应天的数据)

    select sum(total) total, to_char(dateL,'MM"月"DD"日"') dateL from (
    select sum(RZL) total,zlrq dateL from sa.SJJK_RZL rzl where zlrq >=ADD_MONTHS(TRUNC(SYSDATE-1),-1)
    and zlrq < TRUNC(SYSDATE)
    group by zlrq
    union all
    (SELECT 0 total, TRUNC(SYSDATE)-LEVEL dateL FROM DUAL CONNECT BY LEVEL<=TRUNC(SYSDATE)-ADD_MONTHS(TRUNC(SYSDATE-1),-1)
    )
    )
    group by dateL
    order by dateL

    分析下注意:

    基础sql知识

    select trunc(sysdate, 'mm')   from   dual  --2018/7/1    返回当月第一天.

    select trunc(sysdate) from dual  ---2018/7/2  今天的日期为-2018/7/2

    LAST_DAY(DATE)  即 LAST_DAY(日期)  LAST_DAY函数返回指定日期对应月份的最后一天。

    connect by level  是oracle中一组关键字,是用来实现递归查询的,譬如说实现查询 1,2,3,4 .....n 的数字可以使用connect by level

     举例

    SQL语句如下:select level +1 from dual where connect by level <=10

    这种方式可以实现查询1到n的数字,共有n行

    ADD_MONTHS(TRUNC(SYSDATE),-1)  查询当前日期的前一个月的数据(比如今天是7月2号,这就是6月2号)

    TRUNC(SYSDATE)-ADD_MONTHS(TRUNC(SYSDATE),-1)  两个日期的时间差为上述level 的 n,可以查到1到该时间差的行数

     TRUNC(SYSDATE)-LEVEL,当前日期减去(查询1到n的数字,共有n行)得到往前的一段连续的日期。

    to_char(dateL,'MM"月"DD"日"') 把查询出来的日期处理成想要的日期的格式。

     UNION ALL 命令会列出上下所有的值

    进入主题sql的Union all前半段是今天的昨天往前数一个月数据

    后半段是 今天的昨天往前数30天,这个时间段的数据

    所以把所有有值的日期都列出来了。

  • 相关阅读:
    收藏的一些前端学习的网址
    使用box-shadow 实现水波、音波的效果
    asyncjs,waterfall的使用
    兼容opacity的方法
    在php框架中写正规则表达式时的磕绊
    浏览器的渲染原理
    正规则表达式判断数字
    ie6,7,8不兼容rgba,写background时候不要写成rgba
    jquery-ias插件详解
    制作手机页面过程中遇到的一点问题
  • 原文地址:https://www.cnblogs.com/yizhizhangBlog/p/9254530.html
Copyright © 2011-2022 走看看