两个Oracle的SQL问题:按月求和、差值查询(100分)

H

hunyuan

Unregistered / Unconfirmed
GUEST, unregistred user!
1、表A中有日数据,如何按月进行汇总?比如今年上半,汇总后得到1-6月份6个数据。

2、要实现这样的功能
用SQL查询一个表,表中有日期字段(日期型)和注水量(数值型),
要实现计算用户选择的两个日期注水量差大于1的记录
用一句SQL能实现吗?

注:表中还有其它字段,注水井井号,注水井井号每天一个数据,
当然还得加上这个限定条件,井号相同,目的是分析两天注水量变化大的井。
我在油田工作,非常感谢你的帮助:)

 
1、SELECT TRUNC(日期字段,'MM'), SUM(...) FROM A
WHERE ......
GROUP BY TRUNC(日期字段,'MM')
2、不明白你的意思,例如三条记录
2002-01-01 2
2002-01-02 3
2002-01-03 3.5
结果因该是什么?
 

jh1 2002-01-01 2
jh1 2002-01-02 3
jh1 2002-01-03 3.5
jh1 2002-01-04 1
比如用户选择了2002-01-01 和2002-01-02 判断2-3.5是否大于1,
如果大于1则取当前井号
如果用户选择了2002-01-03 和2002-01-04 3。5-1》1 则取jh1
 
上例中选择 2002-01-03 和 2002-01-04 : 3。5-1 = 2.5
和选择 2002-01-04 和 2002-01-03 : 1 - 3.5=-2.5
对结果有区别吗?
 
呵呵,你问得好仔细啊,用户只能选择2002-01-03 和 2002-01-04 ,这样按时间顺序的
2002-01-04 和 2002-01-03 将提示用户重新选择日期
 
试一下:
1、select sum(注水量),CONVERT(char(7), 日期字段, 20) as 年月 from TABLE
gorup by CONVERT(char(7), 日期字段, 20)

2、select btable.* from (select (select 注水量 from Table atable where 日期字段=date1 and atable.井号=Table.井号) as a,
(select 注水量 from Table atabel where 日期字段=date2 and atable.井号=Table.井号) as b
from Table gorup by Table.井号) btable


 
接上:
where btable.a-btable.b>1
 
SELECT SUM(DECODE(TRUNC(日期),开始日期,注水量,-注水量) -
DECODE(TRUNC(日期),结束日期,注水量,-注水量) )/2
FROM TName
WHERE ...
说明:开始日期、结束日期均为传入参数
 
两位大侠的语句小弟看不明白,刚刚接触Oracle,请指点一下思路
 
呵呵,
1、若日期字段=开始日期 S1 = + 2开始日期对应的注水量
2、若日期字段=开始日期 S2 = - 2结束日期对应的注水量
S1 + S2 = 2开始日期对应的注水量 - 2结束日期对应的注水量
 
顶部