用一个sql块分别求日,周,月维度汇总

用一个sql块分别求日,周,月维度汇总,最终是用时间趋势图来呈现:

日维度是:返回时间参数的最近7天的数据,趋势图横轴展示, 每天的数据。

周维度是:返回时间参数的最近6周的数据,趋势图横轴展示, 用每周一展示(本周的汇总)数据。

月维度是:返回时间参数的最近13个月的数据,趋势图横轴展示, 每月的汇总数据

select 

part_dt,

takeout_platform,

sum(close_time),

sum(stop_time)

from 

(

select 

part_dt,

store_id,

takeout_platform,

close_time,

stop_time 

from ads_platform_store_day  

where 1=1 

${IF(frequency="1","AND part_dt >= '"+format(DATEDELTA(endDate,-7),'yyyyMMdd')+"' AND part_dt<= '"+format(endDate,'yyyyMMdd')+"'" ,

IF(frequency="2","AND part_dt >= '"+format(DATEDELTA(endDate,-42),'yyyyMMdd')+"' AND part_dt<= '"+format(endDate,'yyyyMMdd')+"'",

IF(frequency="3","AND part_dt >= '"+format(YEARDELTA(endDate,-1),'yyyyMMdd')+"' AND part_dt<= '"+format(endDate,'yyyyMMdd')+"'"

,"")))}

and store_id in ( '${store_id}')

)a

group by part_dt,takeout_platform

frequency 等于1 表示日,等于2 表示周,等于3 表示月

SQL这样写,好像不对,算不出来对应周和月的汇总值,

请大神指教一下,怎么写?

用户N0188713 发布于 2022-5-7 17:15
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-5-7 17:26

给你一个思路 先用SQL  把  part_dt 所在周的周一获取出来类似下图

image.png

然后SQL 改下

select 

${if(frequency=="1","part_dt",if(frequency=="2","part_dt_W","part_dt_M"))} as part_dt,

takeout_platform,

sum(close_time),

sum(stop_time)

from 

(

select 

part_dt,

处理周  as part_dt_W, ---这两个需要你自己写

处理月  as part_dt_M,---这两个需要你自己写

store_id,

takeout_platform,

close_time,

stop_time 

from ads_platform_store_day  

where 1=1 

${IF(frequency="1","AND part_dt >= '"+format(DATEDELTA(endDate,-7),'yyyyMMdd')+"' AND part_dt<= '"+format(endDate,'yyyyMMdd')+"'" ,

IF(frequency="2","AND part_dt >= '"+format(DATEDELTA(endDate,-42),'yyyyMMdd')+"' AND part_dt<= '"+format(endDate,'yyyyMMdd')+"'",

IF(frequency="3","AND part_dt >= '"+format(YEARDELTA(endDate,-1),'yyyyMMdd')+"' AND part_dt<= '"+format(endDate,'yyyyMMdd')+"'"

,"")))}

and store_id in ( '${store_id}')

)a

group by ${if(frequency=="1","part_dt",if(frequency=="2","part_dt_W","part_dt_M"))} ,takeout_platform

  • 用户N0188713 用户N0188713(提问者) 感谢,我试试
    2022-05-07 17:29 
  • 用户N0188713 用户N0188713(提问者) 请教一下,为什么用双==号,${if(frequency==\"1\",\"part_dt\",if(frequency==\"2\",\"part_dt_W\",\"part_dt_M\"))} as part_dt
    2022-05-07 18:31 
  • Z4u3z1 Z4u3z1 回复 用户N0188713(提问者) 一般一个等号是赋值,两个等号表判断。但有些地方又没这么严格,避免不必要的麻烦还是严格点好
    2022-05-09 09:03 
最佳回答
0
CD20160914Lv8专家互助
发布于2022-5-7 17:21

你的字段里面没有对如果参数是周与月的时候。把日期做处理呀。。。。。

  • 2关注人数
  • 647浏览人数
  • 最后回答于:2022-5-7 17:26
    请选择关闭问题的原因
    确定 取消
    返回顶部