- 和昨天对比
- 和上个月同期对比
- 和去年同期对比【待写】
因同环比定义不同,则不命名同环比,只定义对比天数和日期。统一用自连接写法 和昨天对比
select a.* ,b.* from a left join a b on a.dt = b.dt and a.channel = b.channel and datediff(a.dt, b.dt) = 1和上个月同期对比
当月日期和T-1月同日期同比。除3月以外,其他月份如无上月同日期(31号),就和上月最后一天(30号)进行同比。3月同比2月时间,无法对应日期的均与2月最后一天同比。
with t as (select
a.dt
,a.Yas
,a.X
,case when month (a.dt) in (01,02,04,06,08,09,11) then date_sub(a.dt,31)
when day(a.dt) = 31 and month (a.dt) in (05,07,10,12) then date_sub(trunc(a.dt,'MM'),1) -- 上个月最后一天
when day(a.dt) != 31 and month (a.dt) in (05,07,10,12) then date_sub(a.dt,30)
when day(a.dt) in (29,30,31) and month (a.dt) = 03 then date_sub(trunc(a.dt,'MM'),1)
when month (a.dt) = 03 then date_sub(a.dt,28)
end as 30_day_30
from a
)
select
t.*
,t.X/t_30.X - 1 as X_30
,t.Y/t_30.Y- 1 as Y_30
,t.dt
from t -- T天
left join t t_30 -- T-30
on t.30_day_30 = t_30.dt -- 关键
和去年同期对比【待写】


