关于提前时间段数据的问题,请教下各位大佬

finereport制作报表,写数据库SQL,数据集参数控件是时间,根据参数时间a判断a在本月中是哪一个时间段并提取出对应的数据B,1-7,8-14.15-21,22-月底为四个时间段,如果a在1-7时间段,则提取出1-7时间段内所有对应的B数据。同理a在8-14时间段,则提取出8-14时间段内所有对应的B数据,请教下各位大佬,这个SQL该怎么写啊,是oracle数据库

FineReport 林夕丶 发布于 2020-9-20 13:27
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
1
LarryAbbyLv5中级互助
发布于2020-9-20 14:13(编辑于 2020-9-20 14:22)

给你提供一个参考,

where 表中的时间字段>=case
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=1 and to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))<=7 then
      to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-01','yyyy-mm-dd')
  
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=8 and to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))<=14 then
      to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-08','yyyy-mm-dd')
  
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=15 and to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))<=21 then
      to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-15','yyyy-mm-dd')
     
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=22
     to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-22','yyyy-mm-dd')  
    
    and 表中的时间字段<= case  
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=1 and to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))<=7 then
      to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-01','yyyy-mm-dd')
  
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=8 and to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))<=14 then
      to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-01','yyyy-mm-dd')
  
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=15 and to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))<=21 then
      to_date(to_char(to_date('$时间参数','yyyy-mm-dd'),'yyyy-mm')||'-01','yyyy-mm-dd')  
  
   when to_number(to_char(to_date('$时间参数','yyyy-mm-dd'),'dd'))>=22
     last_day((to_date('$时间参数','yyyy-mm-dd'))
    end

最佳回答
0
yinewstarLv5初级互助
发布于2020-9-20 14:20(编辑于 2020-9-20 14:24)

select

case when to_char(a,'dd')<8 then (select B from 表名 where to_char(a,'dd')<15 and to_char(a,'dd')>8)

  then to_char(a,'dd')<15 and to_char(a,'dd')>8 then then (select B from 表名 where to_char(a,'dd')<22 and to_char(sysdate,'dd')>15)

    then to_char(a,'dd')<22 and to_char(a,'dd')>15 then (select B from 表名 where to_char(a,'dd')>21 ) else '' end

      end

from 表名  

这个试下

  • 3关注人数
  • 359浏览人数
  • 最后回答于:2020-9-20 14:24
    请选择关闭问题的原因
    确定 取消
    返回顶部