SQL取数

如图所示,想取从第一次发货时间开始算3个月内的发货数或者金额

select p.shp_name,sum(b.quantity) as '三期发货数',sum(b.quantity*b.prd_price) as '三期发货额'

  from dat_ckpf_dtl b

 left join ( select convert(date,(CONVERT(CHAR(8), (min(a.sys_locdate)), 112))) as '首次发货日',a.shp_id_to,a.id,c.shp_name,c.shp_fax       

               ,dateadd(MONTH,6,convert(date,(CONVERT(CHAR(8), (min(a.sys_locdate)), 112)))) as '第二期',a.sys_locdate

   ,dateadd(MONTH,9,convert(date,(CONVERT(CHAR(8), (min(a.sys_locdate)), 112)))) as '第三期',c.shp_email

               from dat_ckpf a ,BAS_SHP c

   where c.shp_id = a.shp_id_to

   group by a.shp_id_to,a.id ,c.shp_name,c.shp_fax,a.sys_locdate,c.shp_email

   ) p on p.id = b.id

 

  where p.shp_email = '云南战区'

    and CONVERT(CHAR(8), p.sys_locdate, 112) >= p.第二期

and CONVERT(CHAR(8), p.sys_locdate, 112) <  p.第三期

  group by p.shp_name

微信图片_20230731144712.png

SQL 用户C3501514 发布于 2023-7-31 14:49 (编辑于 2023-7-31 15:56)
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
坚定的小帆薯Lv7高级互助
发布于2023-7-31 15:43(编辑于 2023-7-31 16:32)

你这边使用的左联,p表的过滤不会影响主表的;

要么把p.sys_locdate改为主表的,要么改为inner join

image.png

----------------------------------------------

上面的时间是固定计算吗,还是按照查询参数动态计算

比如日期参数为date

按照查询date查询对应前3个月,前3-6个月这种数据

或者时间区间段会变,比如按照当前日期,查询对应4个月,然后是4-8个个月这种

  • 用户C3501514 用户C3501514(提问者) 发货日期相对于店铺来说是动态的。但一旦发货这个店的发货日期就固定了
    2023-07-31 15:44 
  • 坚定的小帆薯 坚定的小帆薯 回复 用户C3501514(提问者) 那就是按照发货时间动态判断即可哇
    2023-07-31 15:45 
  • 坚定的小帆薯 坚定的小帆薯 回复 用户C3501514(提问者) 那很简单,直接写个判断公式即可 比如case when 时间 between 发货时间 and 发货时间+3个月 then 前三个月 when between 发货时间+3个月 and 发货时间+6 个月 then 前3-6个月 end
    2023-07-31 15:47 
  • 用户C3501514 用户C3501514(提问者) 期限不会变,都是从第一次发货日开始计算的3个月,比如2023年1月1日,那第一个三个月就是2023年1月1日到2023年4月1日的数据,一次类推,第二个三月是2023年4月1日到2023年7月1日,第三个是2023年7月1日到2023年10月1日等等
    2023-07-31 15:48 
  • 坚定的小帆薯 坚定的小帆薯 回复 用户C3501514(提问者) 如果不止3,3-6,6-9的话,会按照时间动态扩展,也可以把时间差求出来,按照除数进行分类也可以的
    2023-07-31 15:48 
  • 2关注人数
  • 332浏览人数
  • 最后回答于:2023-7-31 16:32
    请选择关闭问题的原因
    确定 取消
    返回顶部