SQL 当天在当月、当季度、当年的时间进度
首先需要一张日历表:KKKK.AAAAAA
(可人工维护,只需要一列date,月、季度、年都可以算出来)
字段:
date(每天的日期)
month(当天所处的月)
date_season(当天所处的季度)
year(当天所处的年)
select
date
,year(date) as date_year
,case when month(date)<=3 then 1
when month(date)<=6 then 2
when month(date)<=9 then 3
else 4 end as date_season
,month(date) as date_month
,weekofyear(date) as weekofyear
from kkkk.date
计算时间进度:
with a1 as(
select
date_season
,min(date) as date_season_first
,count(date) as date_season_day
from KKKK.AAAAAA
group by date_season)
,a2 as(
select
date_year
,min(date) as date_year_first
,count(date) as date_year_day
from KKKK.AAAAAA
group by date_year)
,a3 as(
select
date_month
,min(date) as date_month_first
,count(date) as date_month_day
from KKKK.AAAAAA
group by date_month)
select
date.date
,date.date_season
,date.date_year
,date.date_month
,date_season_first
,date_month_first
,concat(round((datediff(date.date,a3.date_month_first)+1)/a3.date_month_day*100,2),'%') as `本月日期进度`
,concat(round((datediff(date.date,a1.date_season_first)+1)/a1.date_season_day*100,2),'%') as `本季度日期进度`
,concat(round((datediff(date.date,a2.date_year_first)+1)/a2.date_year_day*100,2),'%') as `本年日期进度`
from KKKK.AAAAAA date
left join a1 on a1.date_season = date.date_season
left join a2 on a2.date_year = date.date_year
left join a3 on a3.date_month = date.date_month
;