SQL里面,怎样与上一条记录作对比?

来源:百度知道 编辑:UC知道 时间:2024/06/02 02:03:50
表1:
id datetime range
----------------------------------------------------------
GDA08084606 2008-09-04 01:35:18.000
GDA08084615 2008-09-04 00:56:06.000
GDA08084624 2008-09-04 00:53:03.000
GDA08084627 2008-09-04 00:21:16.000
GDA08084635 2008-09-04 04:05:43.000
GDA08084639 2008-09-04 00:00:21.000

说明:range就是要显示与该记录的上一条记录的时间的对比.例如,要在GDA08084615记录上面计算出它也GDA08084606的时间的差异.

谢谢!

首先,在建立表的时候建立一个自增ID,或者用自己的方式建立ID累加作为表的索引,或者建立一个字段用getData()方法获取长日期+长时间。
如果是表里面写入操作,就要写存储过程,先判断Select Max(id) as 字段1 from [表名]中id是多少,然后把筛选出来的id和当前的@参数相对比;如果是在视图中做数据分析,就直接把select top 2 * from 表 order by id desc做成视图,对比它里面两条记录就可以。

前面的答案有点问题,修改了一下,调试通过!
SELECT ID,DATETIME,RANGE=A.DATETIME-
(SELECT B.DATETIME FROM TABLENAME B WHERE B.ID=(SELECT MID=MAX(C.ID) FROM TABLENAME C WHERE C.ID<A.ID))
FROM TABLENAME A

--逻辑乱了一点,解释一下:
别名A:是原表。
别名B:求出了原表中上一个时间(通过上一个ID求出了上一个时间)
别名C:求出了原表中上一个ID

sql server里需要通过游标取出每条记录进行比较后把结果存储回去

oracle应该可以通过分析函数进行

先插入一个临时表里面,然后循环

因为SQL没有记录号的概念,也就是没有前后次序的概念。所以要确定记录的前后次序就依赖数据本身。
比如这个数据,如果ID的大小就是次序的依据,那么就可以一试。

select [id],[datetime],cast([datetime]-(select isnull([datetime],0) from [表1] b
where b.[id]=(select max([id]) from [表1] where [id]<a.[id])) as float)*24*60 as range
from [表1] a

结果中的Range单位为分钟。
可将结果Insert到一个临时表中,再用临时表的Range字段按ID来Update