根据查询日期计算每五天平均量

根据查询日期计算每五天平均量,比如我查询一号至六号,就计算五号(1至5)平均量,六号(2至6)平均量;

注:默认查询一个月

SELECT A.* FROM (

    SELECT  to_char(dateTime , 'yyyy-mm-dd')  KSRQ 

    , to_char(dateTime+4, 'yyyy-mm-dd')  JSRQ 

    , TO_CHAR(dateTime,'WW')  ZS 

FROM  

(  select (dateTime) dateTime,Rownum rn 

   from   

     (with t as

        (select rownum-1 rn from dual connect by rownum<=10000)

      select (to_date('2021-01-01','yyyy-mm-dd')+rn) as dateTime 

      from t 

      where to_date('2021-01-01','yyyy-mm-dd') + rn < to_date('2021-12-31','yyyy-mm-dd')

     ) b 

   where --to_char(b.dateTime,'yyyy-mm-dd')>='2021-01-01' and to_char(b.dateTime,'yyyy-mm-dd')<='2021-01-05'

   to_char(b.dateTime, 'day') = '星期五'  

)

) A

这是之前做的一个按照一周计算的sql,麻烦大神可以优化下这个SQL吗?按照每五天计算,谢谢

image.png

FineReport 木木yn 发布于 2021-5-13 09:05 (编辑于 2021-5-13 09:23)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
木木ynLv5见习互助
发布于2021-5-13 11:44

with t as

        (select rownum-1 rn from dual connect by rownum<=10000)

,TS AS

(SELECT A.* FROM (

    SELECT  to_char(dateTime , 'yyyy-mm-dd')  KSRQ 

    , to_char(dateTime+4, 'yyyy-mm-dd')  JSRQ 

    , rn

FROM  

(  select (dateTime) dateTime,Rownum rn 

   from   

     (

      select (to_date('2021-05-01','yyyy-mm-dd')+rn) as dateTime 

      from t 

      where to_date('2021-05-01','yyyy-mm-dd') + rn < to_date('2021-05-06','yyyy-mm-dd')

     ) b  

)

) A)

我自己用了个循环,谢谢大家了

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-5-13 09:13

题干和描述有矛盾

题干是每5天的平均值,描述的是截止日期(含)的前5天平均值。究竟是哪个需求哦

最佳回答
0
No1-王子阳Lv5中级互助
发布于2021-5-13 09:14

用公式把开始日期从结束日期往后退5天不就可以了吗,然后算出来的结果除5不就是5日均了

最佳回答
0
杨朝健Lv5中级互助
发布于2021-5-13 10:57(编辑于 2021-5-13 11:20)

https://blog.csdn.net/rfb0204421/article/details/7675877/

create table temp_0513 (

 id varchar(100),

 vv int

);

insert into temp_0513 values ('20210101',1);

insert into temp_0513 values ('20210102',1);

insert into temp_0513 values ('20210103',1);

insert into temp_0513 values ('20210104',1);

insert into temp_0513 values ('20210105',1);

insert into temp_0513 values ('20210106',1);

select id,vv

,sum(vv) over(order by id rows between 4 preceding and current row) -- 近5天求和

from temp_0513

;

最佳回答
0
natrueLv2见习互助
发布于2021-5-13 11:03

假如查询4.15-5.20号,

首先是想从4.15号开始每隔五天,还是从5.20开始倒退每隔五天?

另外每隔五天是:

4.15-4.20;4.16-4.21;4.17-4.22

还是

4.15-4.20;4.21-4.26;4.27-5.02 ?

  • 3关注人数
  • 708浏览人数
  • 最后回答于:2021-5-13 11:44
    请选择关闭问题的原因
    确定 取消
    返回顶部