省份 时间 数据1 数据2
A省 2010-05-01 10 20
A省 2010-06-01 20 50
B省 2010-05-01 100 300
B省 2010-06-01 200 800
.
.
.
.我要查询5月份各省的数据
得出的结果是
省份 数据1 数据2
A省 10 30
B省 100 500*****A省、B省的数据都是由各省6月1号的数据减去5月1好的数据所得到。
希望各路大虾帮帮小弟。
A省 2010-05-01 10 20
A省 2010-06-01 20 50
B省 2010-05-01 100 300
B省 2010-06-01 200 800
.
.
.
.我要查询5月份各省的数据
得出的结果是
省份 数据1 数据2
A省 10 30
B省 100 500*****A省、B省的数据都是由各省6月1号的数据减去5月1好的数据所得到。
希望各路大虾帮帮小弟。
解决方案 »
- 错误:OracleOraHome90TNSListener服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报急!!!在线等!!!
- 关于关系代数的除法运算的SQL实现
- 求教一下执行计划中ilter 与 nested loops的关系
- 请问这个触发器如何写? 我已经想了一天了,搞的头疼,有点晕,中午也没吃饭
- 關於單行游標的數據返回問題!!
- 求sql语句(当然是oracle中的),主要为update
- 帮忙呀!Oracle 9i,解决马上给分!
- 赛杨4 1.7G 加 HY 256DDR 运行 Oracle(新版本)畅不畅顺啊?
- 请问Oracle中的表如何导出到FoxPro的dbf表中。
- 一个关于解析顺序的问题
- [斑竹手下留情,借宝地问个C#调用oracle过程的问题]C#中能调用oracle传入参数pl/sql
- 关于数据库转移
select a.省份,b.数据1-a.数据1 as 数据1,b.数据2-a.数据2 as 数据2
from table a,table b
where a.省份 = b.省份 and a.时间 = '2010-05-01' and b.时间 = '2010-05-01'
注意一下你DB“时间”这一列的数据类型
from table a,table b
where a.省份=b.省份 and a.时间=add_months(b.时间,1)
WITH tmp AS
(
SELECT 'A省' sf, DATE '2010-05-01' AS rq, 10 sj1, 20 sj2 FROM DUAL UNION ALL
SELECT 'A省' sf, DATE '2010-06-01' AS rq, 20 sj1, 50 sj2 FROM DUAL UNION ALL
SELECT 'B省' sf, DATE '2010-05-01' AS rq, 100 sj1, 300 sj2 FROM DUAL UNION ALL
SELECT 'B省' sf, DATE '2010-06-01' AS rq, 200 sj1, 800 sj2 FROM DUAL
)
SELECT sf,x1,x2
FROM (
SELECT sf, rq, sj1, sj2
, sj1 - LAG(sj1, 1) OVER (PARTITION BY sf ORDER BY rq) x1
, sj2 - LAG(sj2, 1) OVER (PARTITION BY sf ORDER BY rq) x2
FROM tmp
)
WHERE x1 IS NOT NULL AND x2 IS NOT NULL;
SF X1 X2
------ ---------- ----------
A省 10 30
B省 100 500
select a.provice,a.date,b.data1-a.data1 data1,b.data2-a.data2 data2
from table a,table b
where a.date=to_date('201005','yyyymm') and b.date=add_months(a.date,1)
已写入 file afiedt.buf 1 with tb AS
2 (
3 SELECT 'A' sf, DATE '2010-05-01' AS dt, 10 sj1, 20 sj2 FROM DUAL UNION ALL
4 SELECT 'A' sf, DATE '2010-06-01' AS dt, 20 sj1, 50 sj2 FROM DUAL UNION ALL
5 SELECT 'B' sf, DATE '2010-05-01' AS dt, 100 sj1, 300 sj2 FROM DUAL UNION ALL
6 SELECT 'B' sf, DATE '2010-06-01' AS dt, 200 sj1, 800 sj2 FROM DUAL
7 )
8 select a.sf,a.sj1-b.sj1,a.sj2-b.sj2
9 from tb a,tb b
10 where a.sf=b.sf and to_char(a.dt,'mm')=to_char(add_months(b.dt,1),'mm')
11* and to_char(b.dt,'mm')='05'
SQL> /S A.SJ1-B.SJ1 A.SJ2-B.SJ2
- ----------- -----------
A 10 30
B 100 500