精华内容
下载资源
问答
  • MySQL-查询指定时间段数据,近7天、指定季度、年度数据 业务需求需要查询指定时间段数据,特此记录,有更优时则优化更新。 字母缩写 TB 操作表(TableName) q_time 操作的时间字段(query_time) 代码都是经过...

    描述

    业务需求需要查询指定时间段数据,特此记录,有更优时则优化更新。

    • 字母缩写
      • TB 操作表(TableName)
      • q_time 操作的时间字段(query_time)
        业务中测试语句
        代码都是经过Navicat Premium 12实测的,写法不唯一,但是结果是对的。
        Ctrl C + V后可以直接使用则直接套用,但是事后一定要再测试再学习,做好吸纳知识的准备,看一遍就懂也至少测试一下。
        即使是为了下次复制方便一些,至少把网址收藏,或者记下笔记。吾与君共勉之.。
        在这里插入图片描述

    查询指定日期的数据

    今天

    1)SELECT * FROM `TB` WHERE q_time between '2021-02-05 00:00:00' and '2021-02-05 23:59:59' 
    
    // CURDATE() 和 DATE_FORMAT(NOW(),'%Y-%m-%d') 和 '%2021-02-05%' 所获得数据是一样的,选其一。使用日期函数的话就需要使用concat去拼接,直接用%%就会不识别函数。2)SELECT * FROM `TB` WHERE q_timelike concat('%',DATE_FORMAT(NOW(),'%Y-%m-%d'),'%');
         SELECT * FROM `TB` WHERE sdq_timete like '%2021-02-05%';
    
    3)SELECT * from `TB` WHERE DATE(q_time) = CURDATE();
    
    // TO_DAYS() 加上 [加减操作] 也可以获取昨天等指定日期数据。4)SELECT * FROM `TB` WHERE TO_DAYS(q_time) = TO_DAYS(NOW());
    
    5)SELECT * FROM `TB` WHERE DATE_FORMAT( q_time, '%Y%m%d' ) = DATE_FORMAT( CURDATE( ) , '%Y%m%d' );
    
    6)SELECT * FROM `TB` mes_inspection_record WHERE ( datediff ( q_time, '2021-02-06' ) = 0 );
    
    6)SELECT * FROM `TB` WHERE ( datediff ( q_time , '2021-02-06' ) = 0 );
    
    7)SELECT * FROM `TB` WHERE year(q_time) = 2021 and month(q_time)= 02 and day(q_time) = 06;
    

    昨天

    // TO_DAYS() 函数:返回天数,从年份0开始距离你给定时间的天数。其实就像大区间天数减去小区间天数,
    // 重复的天数就是舍去的交集。显而易见查询前天,则差值为 [<= 2] [> 1] 即可。1)SELECT * FROM `TB` WHERE TO_DAYS(NOW()) - TO_DAYS(q_time) <= 1 and TO_DAYS(NOW()) - TO_DAYS(sdate) > 0;
    
    // 与 TO_DAYS() 函数一样,则同理可得查询前天,则差值为 [ -2 ] 即可。下面不再赘述。2)SELECT * FROM `TB` WHERE DATEDIFF(q_time,NOW())=-1;
    

    前天

    SELECT * FROM `TB` WHERE TO_DAYS(NOW()) - TO_DAYS(q_time) <= 2;
    

    查询指定时间段的数据

    查询近X天的我一般都是使用用这个 DATE_SUB() 函数,MySQL自带的日期截取函数。

    本周

    // PS:外国人一周是从礼拜天开始的,我们的结果也是从礼拜天开始~周六。
    SELECT * FROM `TB` WHERE YEARWEEK(date_format(q_time,'%Y-%m-%d')) = YEARWEEK(now());
    

    上周

    // 同理近几周直接更改对应的周数差值即可
    SELECT * FROM `TB` WHERE YEARWEEK(date_format(q_time,'%Y-%m-%d')) = YEARWEEK(now())-1;
    

    近7天

    // 语义是查询TB表中q_time字段从今天日期开始往回倒7天之后的所有数据。
    // PS:往回倒7天之后的所有,会包括今天和未来的数据,做测试的时候要注意。虽然真实业务中一般没有提前添加未来的数据,但是建议只要不能保证数据一定不会有未来日期的,都要做判断(下面fix分组是因为每天有多条数据,随机应变吧)。
    SELECT * FROM `TB` t1 WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(q_time);
    fix:
    SELECT * FROM `TB` t1 WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(q_time) 
    AND now() > date(q_time) GROUP BY DATE_FORMAT( t1.q_time, '%Y-%m-%d' );
    

    近30天

    // 与查询近7天同理。
    SELECT * FROM `TB` WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(sdate);
    

    近半年(月)

    // 同理近一个季度则[ 3 ],近8个月则[ 8 ]。
    SELECT * FROM `mes_inspection_record` WHERE sdate BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) and NOW();
    
    

    本月

    // 同理本(今)天:'%Y%m%d'。本(今)年:'%Y'。
    SELECT * FROM `TB` WHERE DATE_FORMAT(q_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' );
    

    上一月

    // 同理上一年:'%Y'。
    SELECT * FROM `TB` WHERE PERIOD_DIFF( date_format( NOW() , '%Y%m' ) , DATE_FORMAT(q_time, '%Y%m' ) ) =1;
    

    本季度

    // 同理上一年:'%Y'。
    SELECT * FROM `TB` WHERE QUARTER(q_time)=QUARTER(NOW());) ) =1;
    

    上一季度

    // 同理上上季度[ =2 ]
    SELECT * FROM `TB` WHERE QUARTER(q_time)=QUARTER(DATE_SUB(NOW(),INTERVAL 1 QUARTER));
    

    本年

    SELECT * FROM `TB` WHERE YEAR(q_time)=YEAR(NOW());
    

    去年

    // 同理前年为[ =2 ]
    SELECT * FROM `TB` WHERE YEAR(q_time)=YEAR(DATE_SUB(NOW(),INTERVAL 1 year));
    

    过去7天和未来七天

    select * from `TB` where q_time between DATE_SUB(CURDATE(), INTERVAL 1 WEEK) and DATE_SUB(CURDATE(), INTERVAL -1 WEEK);
    

    环比(去年的今天)

    // 同理前年为[ =2 ]
    SELECT * FROM `TB` WHERE DATE_SUB(CURDATE(), INTERVAL 1 year) = date(q_time)
    

    同比(上月的今天)

    // 同理前年为[ =2 ]
    SELECT * FROM `TB` WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) = date(q_time)
    
    展开全文
  • 同比环比计算

    2020-08-03 15:37:59
    1.同比环比的区别和意义 1.1区别 同比:本期与同期做对比。例如 有当前月份的数据,获取上一年相同月份的数据进行比较 环比:本期与上期做对比。例如 有当前月份的数据,获取本年上月的数据进行比较 1.2意义 同比和...

    1.同比环比的区别和意义

    1.1区别

    同比:本期与同期做对比。例如 有当前月份的数据,获取上一年相同月份的数据进行比较

    环比:本期与上期做对比。例如 有当前月份的数据,获取本年上月的数据进行比较

    1.2意义

    同比和环比用于表示某一事物在对比时期内发展变化的方向和程度,以财务盈利为例,同比和环比可以反应企业当前的盈利情况,对比上月和去年是否上升还是下降

    2.同比环比实现代码

    SELECT CWBB_ZBBH 
          ,CQJ
          ,NLRZE_DQ
          ,LAG(NLRZE_DQ, 1, 0) OVER(PARTITION BY CWBB_ZBBH ORDER BY CQJ) AS NZYSR_HB-- 环比分析,与上个月份进行比较
          ,LAG(NLRZE_DQ, 12, 0) OVER(PARTITION BY CWBB_ZBBH ORDER BY CQJ) AS NZYSR_TB-- 同比分析,与上个年度相同月份进行比较   
      FROM DW_CW_CWBBZB
    

    环比分析是通过窗口函数的lag() over()先实现按照分析维度进行分组,按照日期进行排序,然后lag去拉去上一行的数据。
    同比分析是通过窗口函数的lag() over()先实现按照分析维度进行分组,按照日期进行排序,然后lag去拉去当前年月前12行的数据

    展开全文
  • 同比环比

    2021-02-18 14:03:28
    同比环比一、同比环比是什么意思?二、同比环比的计算公式是什么?三、同比环比的区别是什么?四、补充 同比是指上年同期,环比是指本年上期 举例来说,2009.9月,同比是与2008.9月比,环比是与2009.8月比。...

    同比是指上年同期,环比是指本年上期

    举例来说,2009.9月,同比是与2008.9月比,环比是与2009.8月比。

    一、同比和环比是什么意思?

    1、同比:一般情况下是今年第n月与去年第n月比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。如,本期2月比去年2月,本期6月比去年6月等。

    2、环比:表示连续2个单位周期(比如连续两月)内的量的变化比。环比包括两种:环比增长速度和环比发展速度。

    二、同比和环比的计算公式是什么?

    1、同比发展速度的公式:
    同比发展速度=本期发展水平/去年同期水平×100%
    同比增长速度=(本期发展水平-去年同期水平)/去年同期水平×100%
    在实际工作中,经常使用这个指标,如某年、某季、某月与上年同期对比计算的发展速度,就是同比发展速度。

    2、环比发展速度的公式:
    环比增长率=(本期数-上期数)/上期数×100%
    同比增长率=(本期数-同期数)/|同期数|×100%
    环比发展速度,一般是指报告期水平与前一时期水平之比,表明现象逐期的发展速度。

    三、同比和环比的区别是什么?

    1、同比是本期与同期做对比,环比是本期与上期做对比。

    2、环比一般是用在月、日很少用在年上,主要是对比很短时间内涨幅程度,不过由于行业差异,比如旅游,会受到淡旺季影响。

    3、同比一般用在相邻两年,相同时间段内,查看涨幅程度,一般用在两年相同月份,很少用在两月相同日期。

    四、补充

    同比:是今年的某个阶段与去年的相同时段比较,适用于观察某个指标在不同年度的变化

    • 优势是可以去除大多数业务的季节因素,比如招聘,2月是淡季,3月是旺季,做3月的分析时用环比实际上体现出的是招聘市场的变化,而不是公司销售额的变化,用同比则可以看出今年的增长情况;
    • 劣势是灵活性较低,因为同比大多数以年为单位(否则就达不到去除季节因素的目标),不能反映出数据的短期大量变化。

    环比:是某个阶段与其上一个时长相等的阶段做比较,比如上周和本周,上月和本月,上季度和本季度等等,用于表示数据的连续变化趋势

    • 优势是对于高速增长型业务,能非常好的体现出业务的增长趋势和事件的影响(典型如新开网站流量,UV第一周100,第二周300,第三周500,第四周做了个活动,2000,第五周1000,那么前三周网站的用户增长趋势很好,第四周数据有个突增,能看到活动带来的增长是很明显的);
    • 劣势是光看数字难以排除季节性因素,且对于稳定波动型数据(例如部门人数,每月有进有出,一年内的走势不明确,但部门规模又逐年扩大)来说,趋势不明显,环比意义相对小。
    展开全文
  • Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。相关操作代码如下:CREATE TABLE salaryByMonth(employeeNo ...

    Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。

    相关操作代码如下:

    CREATE TABLE salaryByMonth

    (

    employeeNo varchar2(20),

    yearMonth varchar2(6),

    salary number

    ) ;

    insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALARY)

    values (1, '200805', 500);

    insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALARY)

    values (1, '200802', 150);

    insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALARY)

    values (1, '200803', 200);

    insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALARY)

    values (1, '200804', 300);

    insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALARY)

    values (1, '200708', 100);

    commit;

    SELECT EMPLOYEENO

    ,YEARMONTH

    ,SALARY

    ,MIN(SALARY) KEEP(DENSE_RANK FIRST ORDER BY YEARMONTH) OVER(PARTITION BY EMPLOYEENO) FIRST_SALARY -- 基比分析 salary/first_salary

    ,LAG(SALARY, 1, 0) OVER(PARTITION BY EMPLOYEENO ORDER BY YEARMONTH) AS PREV_SAL -- 环比分析,与上个月份进行比较      ,LAG(SALARY, 12, 0) OVER(PARTITION BY EMPLOYEENO ORDER BY YEARMONTH) AS PREV_12_SAL -- 同比分析,与上个年度相同月份进行比较      ,SUM(SALARY) OVER(PARTITION BY EMPLOYEENO, SUBSTR(YEARMONTH, 1, 4) ORDER BY YEARMONTH RANGE UNBOUNDED PRECEDING) LJ --累计值

    FROM SALARYBYMONTH

    ORDER BY EMPLOYEENO

    ,YEARMONTH

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,188
精华内容 475
关键字:

年度数据同比环比