数据如下所示:
时间 数据1 数据2 地域(F_REGIONNAME)
2010-06-01 10 12 XX省
2010-06-01 15 3 XX省
2010-07-01 20 32 XX省
2010-07-01 30 10 XX省
2010-07-01 25 55 XX省
。
。
。
我想求6月份的数据,方法是用7月1号的数据的总和减去6月1号数据的总和,
也就是说:数据1等于20+30+25-10-15=50
数据2等于32+10+55-12-3=82
我写的SQL文如下:
SELECT TBD1.F_REGIONNAME,
SUM(TBD2.数据1) - sum(TBD1.数据1) data1,
SUM(TBD2.数据2) - sum(TBD1.数据2) data2
FROM TB_BAS_PRODAYHAZARDDATA TBD1, TB_BAS_PRODAYHAZARDDATA TBD2
WHERE TBD1.F_REGIONCODE = TBD2.F_REGIONCODE
AND TBD1.F_STATICDAYTIME = '2010-06-01'
AND TBD2.F_STATICDAYTIME = '2010-07-01'
GROUP BY TBD1.F_REGIONNAME不知道这样写有什么不妥,每次查询结果都是
地域 data1 data2
XX省 75 149
这两个结果我算了一下是每个7月份数据减去6月份数据的结果再相加得到的,
麻烦大虾们知道一下应该怎么改正呢?谢谢了!!
时间 数据1 数据2 地域(F_REGIONNAME)
2010-06-01 10 12 XX省
2010-06-01 15 3 XX省
2010-07-01 20 32 XX省
2010-07-01 30 10 XX省
2010-07-01 25 55 XX省
。
。
。
我想求6月份的数据,方法是用7月1号的数据的总和减去6月1号数据的总和,
也就是说:数据1等于20+30+25-10-15=50
数据2等于32+10+55-12-3=82
我写的SQL文如下:
SELECT TBD1.F_REGIONNAME,
SUM(TBD2.数据1) - sum(TBD1.数据1) data1,
SUM(TBD2.数据2) - sum(TBD1.数据2) data2
FROM TB_BAS_PRODAYHAZARDDATA TBD1, TB_BAS_PRODAYHAZARDDATA TBD2
WHERE TBD1.F_REGIONCODE = TBD2.F_REGIONCODE
AND TBD1.F_STATICDAYTIME = '2010-06-01'
AND TBD2.F_STATICDAYTIME = '2010-07-01'
GROUP BY TBD1.F_REGIONNAME不知道这样写有什么不妥,每次查询结果都是
地域 data1 data2
XX省 75 149
这两个结果我算了一下是每个7月份数据减去6月份数据的结果再相加得到的,
麻烦大虾们知道一下应该怎么改正呢?谢谢了!!
select F_REGIONNAME,sum(d1) d1,sum(d2) d2 from TB_BAS_PRODAYHAZARDDATA where F_STATICDAYTIME = '2010-07-01'
group by F_REGIONNAME) a
left join
(select F_REGIONNAME,sum(d1) d1,sum(d2) d2 from TB_BAS_PRODAYHAZARDDATA where F_STATICDAYTIME = '2010-06-01'
group by F_REGIONNAME) b
on a.F_REGIONNAME = b.F_REGIONNAME
SUM(case F_STATICDAYTIME when '2010-06-01' then -TBD.数据1 else TBD.数据1 end ) data1,
SUM(case F_STATICDAYTIME when '2010-06-01' then -TBD.数据2 else TBD.数据2 end ) data2
FROM TB_BAS_PRODAYHAZARDDATA TBD
WHERE TBD.F_STATICDAYTIME in ( '2010-06-01','2010-07-01')
GROUP BY TBD.F_REGIONNAME
select F_REGIONNAME,sum(d1),sum(d2)
from (select decode(F_STATICDAYTIME,'2010-07-01',d1,'2010-06-01',0-d1,0) d1,
decode(F_STATICDAYTIME,'2010-07-01',d2,'2010-06-01',0-d2,0) d2,
F_REGIONNAME
from TB_BAS_PRODAYHAZARDDATA)
group by F_REGIONNAME
select date ,sum(data1),sum(data2)
from
(
select date,(case when to_char(date,'YYYY-MM-DD')='2010-06-01' then -1*data1 else data1 end) as data1,
(case when to_char(date,'YYYY-MM-DD')='2010-06-01' then -1*data2 else data2 end) as data2
from tb
)
group by date
SELECT TBD1.F_REGIONNAME,
sum(decode(TBD1.F_STATICDAYTIME,'2010-06-01',-1*TBD1.数据1,TBD1.数据1)) data1,
sum(decode(TBD1.F_STATICDAYTIME,'2010-06-01',-1*TBD1.数据2,TBD1.数据2)) data2
FROM TB_BAS_PRODAYHAZARDDATA TBD1
WHERE TBD1.F_STATICDAYTIME in('2010-06-01','2010-07-01')
GROUP BY TBD1.F_REGIONNAME