关于查询季度的sql

季度的失去了要求就是,比如:选择的2月份,查询的是第一个季度2月份之前的数据,就是一月份的数据;  比如:选择的3月份,查询的是第一个季度3月份之前的数据,就是一月份和二月份的数据;sql应该怎么写呢;现在的写法是查询的本季度所有的数据

SELECT * FROM BT_REPORT_FORM t

where 1=1

AND REPORT_NUMBER = '2' 

and trunc((to_char(to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm'),'mm')+2)/3)=trunc((to_char(to_date('${WORK}'||'-01','yyyy-mm-dd'),'mm')+2)/3)

FineReport yzmS4RK89690521 发布于 2022-12-5 14:38
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
RiveryLv5中级互助
发布于2022-12-5 14:58(编辑于 2022-12-5 15:05)

这个我不是跟你说过怎么写嘛

with temp as(SELECT *,

      case when substr(ACCOUNT_YEAR_MONTH,6,2) in ('01','02','03') then  '第一季度'

      when substr(ACCOUNT_YEAR_MONTH,6,2) in ('04','05','06') then  '第二季度'

      when substr(ACCOUNT_YEAR_MONTH,6,2) in ('07','08','09') then  '第三季度'

      else '第四季度' end 季度

FROM XM_REPORT_FORM t

where 1=1

AND REPORT_NUMBER = '43' )

select 你想要的数据

from temp 

where 季度='${qua}' and to_char(to_date(ACCOUNT_YEAR_MONTH,'yyyy-mm')<'${pDate}'

order by 季度

image.png

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-12-5 14:42(编辑于 2022-12-5 15:00)

SELECT * FROM BT_REPORT_FORM t

where 1=1

AND REPORT_NUMBER = '2' 

and to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm-dd')>='${DATEINYEAR(CONCATENATE(WORK,"-01"),1)}' and to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm-dd')<'${CONCATENATE(WORK,"-01")}' 

  • yzmS4RK89690521 yzmS4RK89690521(提问者) 这个 可以查询 选择的2月份,查询的是第一个季度2月份之前的数据,就是一月份的数据吗
    2022-12-05 14:48 
  • Z4u3z1 Z4u3z1 回复 yzmS4RK89690521(提问者) 如果我没理解错:你是想查询所选日期年度1号 至所选月度最后一天的数据。如果是 那就参考上面的SQL
    2022-12-05 14:53 
  • yzmS4RK89690521 yzmS4RK89690521(提问者) 回复 Z4u3z1 文字与格式字符串不匹配呢
    2022-12-05 14:53 
  • yzmS4RK89690521 yzmS4RK89690521(提问者) 回复 Z4u3z1 查询所选择月的季度数据,选择月的不查出来,就查询所选择月这个季度前面的月数据,选择一月就查不出来
    2022-12-05 14:55 
  • Z4u3z1 Z4u3z1 回复 yzmS4RK89690521(提问者) SQL修改你 你试试
    2022-12-05 15:01 
最佳回答
0
yzm339714Lv6中级互助
发布于2022-12-5 14:52

and to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm') >=trunc(to_date('${WORK}'||'-01','yyyy-mm-dd'),'Q')

and to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm') <to_date('${WORK}'||'-01','yyyy-mm-dd')

最佳回答
0
FR一小白Lv3见习互助
发布于2022-12-5 15:25

看下这个行不行,使用大于和小于是为了防止索引失效

SELECT * FROM BT_REPORT_FORM t

where 1=1

AND REPORT_NUMBER = '2' 

/*开始时间为大于选择月份的季度的前一天*/

and to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm-dd')> to_date('${DATEDELTA(DATEINQUARTER(CONCATENATE(WORK,'-01'),1),-1)}')

/*结束时间为小于选择月份的第一天*/

and to_date(t.ACCOUNT_YEAR_MONTH,'yyyy-mm-dd')< to_date('${CONCATENATE(WORK,"-01")}')

  • 4关注人数
  • 416浏览人数
  • 最后回答于:2022-12-5 15:25
    请选择关闭问题的原因
    确定 取消
    返回顶部