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

现有数据格式为

-- 原始数据   
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

猜你喜欢

转载自blog.csdn.net/mingming20547/article/details/94003725