SQL 当天在当月、当季度、当年的时间进度

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
;
发布了11 篇原创文章 · 获赞 17 · 访问量 1292

猜你喜欢

转载自blog.csdn.net/nnnnn68/article/details/105216039