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
上一篇: LeetCode 226. 翻转二叉树