数据库中的数据是按照每天累加统计的,就是说每年从一月一号开始统计,一月二号的数据等于一月一号加上一月二号当天的数据这样一直累加到年末十二月三十一号。
例子如下: 地域 时间 数据A 数据B
省份1 2010-01-01 3 5
省份1 2010-01-02 5 9
省份1 2010-01-03 7 12
省份2 2010-02-28 10 8
省份2 2010-03-01 20 20
省份2 2010-03-02 25 30
查询结果为:
地域 时间 数据A 数据B
省份1 2010-01-01 3 5
省份1 2010-01-02 2 4
省份1 2010-01-03 2 3
省份2 2010-02-28 10 8
省份2 2010-03-01 10 12
省份2 2010-03-02 5 10
再次麻烦个位大虾帮忙想一下这个SQL问怎么写,先谢谢了!
例子如下: 地域 时间 数据A 数据B
省份1 2010-01-01 3 5
省份1 2010-01-02 5 9
省份1 2010-01-03 7 12
省份2 2010-02-28 10 8
省份2 2010-03-01 20 20
省份2 2010-03-02 25 30
查询结果为:
地域 时间 数据A 数据B
省份1 2010-01-01 3 5
省份1 2010-01-02 2 4
省份1 2010-01-03 2 3
省份2 2010-02-28 10 8
省份2 2010-03-01 10 12
省份2 2010-03-02 5 10
再次麻烦个位大虾帮忙想一下这个SQL问怎么写,先谢谢了!
解决方案 »
- 数据库sql语句求教
- oracle database links 查询问题
- ORA-00972 标识符过长问题
- 有关Oracle的版本问题
- 请大家先看看这篇文章,对大家来说应该是很简单的问题,帮我解释一下
- Oracle8i和Oracle8.05有什么区别?
- 安装Oracle9i后,无法启动OracleOracle9iTNSListener和OracleOracle9iAgent服务,这是怎么回事呀?请各位高手帮忙
- 在数据库里有一个 vchar型字段 现在想在每一个值前面加一个 0 , 该如何
- 有关oracle中blob问题(急)
- decode函数的问题,大家帮帮忙
- 看看这个SQL错在哪?
- sum查询结果中,如何去除空记录,请大虾朋友们指点
select '省份1' code ,to_date('2010-01-01','yyyy-mm-dd') time, 3 data1, 5 data2 from dual
union all
select '省份1',to_date('2010-01-02','yyyy-mm-dd'),5, 9 from dual
union all
select '省份1',to_date('2010-01-03','yyyy-mm-dd'),7, 12 from dual
union all
select '省份2',to_date('2010-02-28','yyyy-mm-dd'),10, 8 from dual
union all
select '省份2',to_date('2010-03-01','yyyy-mm-dd'),20, 20 from dual
union all
select '省份2',to_date('2010-03-02','yyyy-mm-dd'),25, 30 from dual
)
select code,
time,
data1-lag(data1,1,0)over(partition by code order by time) data1,
data2-lag(data2,1,0)over(partition by code order by time) data2
from tab CODE TIME DATA1 DATA2
-----------------------------------------
省份1 2010.01.01 00:00:00 3 5
省份1 2010.01.02 00:00:00 2 4
省份1 2010.01.03 00:00:00 2 3
省份2 2010.02.28 00:00:00 10 8
省份2 2010.03.01 00:00:00 10 12
省份2 2010.03.02 00:00:00 5 10
(
地域 VARCHAR2(90),
时间 DATE,
数据A number,
数据B number);
--插入测试数据略--生成加过SQL
SELECT A.地域,
A.时间,
数据A - LAG(数据A, 1, 0) OVER(PARTITION BY 地域 ORDER BY 时间),
数据B - LAG(数据b, 1, 0) OVER(PARTITION BY 地域 ORDER BY 时间)
FROM T_1 A;
建议在 lag 函数前,加入 case when 的判断吧。
比如 case when to_char(datetime,'MMDD') = '0101' (新年第一天) then data1
else (借用下面的lag函数即可) end data1