欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql 获取工作日上一天的数据 环比MYSQL 两日期之间的工作日(除去周六日,不考虑节假日)

程序员文章站 2022-03-03 10:12:48
...

现有数据格式为

-- 原始数据   
period_wid       num

20190625            30

20190624            33

20190621            31

20190620            21

-- 目标数据格式
   period_wid       num           last_num

20190625            30             33

20190624            33             31

20190621            31             21

20190620            21

取得前一天:

yyyyMMdd类型的值转日期

date_format(period_wid,'%Y-%m-%d') , '20190625'  转换成了 2019-06-25

yy-MM-dd如何转换为yyyyMMdd

replace(date,'-','');  把日期里面的-替换掉就行了

-- 获取当前日期在上周的周四
SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')+3)
-- 获取当前日期在本周的五
SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-5)
DATE_SUB() 函数从日期减去指定的时间间隔。
CURDATE() 函数获得当前的年月日日期
%w     一个星期中的天数(0=Sunday   ……6=Saturday )
-- period_wid 20190625
SELECT 
   PERIOD_WID
   ,ITEM_TYPE  
   ,ITEM_TYPE2
   ,SUM(MKT_PRICE) AS MKT_PRICE
   ,SUM(LAST_MKT_PRICE) AS LAST_MKT_PRICE   
FROM(
SELECT
    PERIOD_WID
   ,ITEM_TYPE 
   ,ITEM_TYPE2
   ,MKT_PRICE
   ,0 AS LAST_MKT_PRICE
   FROM DM_GOA.dm_goa_bulk_mtk_price
  UNION ALL 
   SELECT   
      replace(
     CASE WHEN (weekday(date_format(period_wid,'%Y-%m-%d'))+1)%7 = 1 --如果是本周一
--取上周五
     THEN  subdate(date_format(period_wid,'%Y-%m-%d'),date_format(date_format(period_wid,'%Y-%m-%d'),'%w')-2)   
     ELSE date_sub(date_format(period_wid,'%Y-%m-%d'),interval -1 day)  --否则取昨天
     END,'-','')  AS PERIOD_WID
   ,ITEM_TYPE 
   ,ITEM_TYPE2
   ,0 AS MKT_PRICE
   , MKT_PRICE AS LAST_MKT_PRICE
   FROM DM_GOA.dm_goa_bulk_mtk_price) F
   GROUP BY 
     PERIOD_WID
    ,ITEM_TYPE 
    ,ITEM_TYPE2 ORDER BY PERIOD_WID DESC