tinfo表结果
日期 代号 数量 价格
l_date c_code l_amount en_price想得到的结果:
查询c_code某一天的前5天(不含当日)的平均数量、前3天的总数量、往前推第3天的价格
要可以支持查询一段日期,c_code也不止一个,我写了下面的sql,查询出来的结果发现有些天是对的,但有些天的数据发现不是想要的结果,
又找不出是哪个地方写错了,不常用分析函数,请大家看看下面的sql哪儿有问题吧,或者有什么更好的写法:select a.l_date,
a.c_code,
nvl(avg(a.l_amount) over(partition by a.c_code order by a.l_date
range between 6 preceding and 1 preceding),
0) l_avg_deal,
nvl(sum(a.l_amount) over(partition by a.c_code order by a.l_date
range between 4 preceding and 1 preceding),
0) l_total_amount,
nvl(max(a.en_price) over(partition by a.c_code order by a.l_date
range between 4 preceding and 4 preceding),
0) en_price1
from tinfo a
where a.l_date >= 20060517
and a.l_date <= 20060613
日期 代号 数量 价格
l_date c_code l_amount en_price想得到的结果:
查询c_code某一天的前5天(不含当日)的平均数量、前3天的总数量、往前推第3天的价格
要可以支持查询一段日期,c_code也不止一个,我写了下面的sql,查询出来的结果发现有些天是对的,但有些天的数据发现不是想要的结果,
又找不出是哪个地方写错了,不常用分析函数,请大家看看下面的sql哪儿有问题吧,或者有什么更好的写法:select a.l_date,
a.c_code,
nvl(avg(a.l_amount) over(partition by a.c_code order by a.l_date
range between 6 preceding and 1 preceding),
0) l_avg_deal,
nvl(sum(a.l_amount) over(partition by a.c_code order by a.l_date
range between 4 preceding and 1 preceding),
0) l_total_amount,
nvl(max(a.en_price) over(partition by a.c_code order by a.l_date
range between 4 preceding and 4 preceding),
0) en_price1
from tinfo a
where a.l_date >= 20060517
and a.l_date <= 20060613
解决方案 »
- 一个查询的性能问题
- 求sql语句
- 新手,求一条查询语句~
- oracle一个表有char(1)类型字段,里面记录字符'A','B'.....,请问我想对这个char进行加减运算,得到另外一个字符,如'A'+1='B',请问如何
- ORACLE 9I中建表的脚本都 执行了,我的表去哪里能看到啊,在(oem)中
- 有个客户购买了一套oracle数据库(有许可的),我想刻一套,留下来自己用,不知oracle公司有什么限制没有,刻下来的能好使不?
- 求条查询语句:select * from a where 姓名 like '%x%' 如果x是变量如何写?
- 难题征解,看看谁的SQL厉害?
- cognos连接oracle出错
- oracle从aix服务器导出到另一台aix服务器造成数据超过字段长度
- exists里面会走索引吗
- 一个很难的sql 不会实现 急!!!
select a.l_date,a.c_code,a.l_amount,a.en_price,
nvl(avg(a.l_amount) over(partition by a.c_code
order by a.l_date range between 5 preceding and 1 preceding ),0) avg_5price,
nvl(sum(a.l_amount) over(partition by a.c_code
order by a.l_date range between 3 preceding and 1 preceding ),0) sum_3price,
nvl(avg(a.en_price) over(partition by a.c_code
order by a.l_date range between 3 preceding and 3 preceding ),0) en_3price
from t_info a
where a.l_date > trunc(sysdate - 16)
and a.l_date < sysdate
你的sql根据实际情况改下就可以了