SQL里面,怎样与上一条记录作对比?
表1:iddatetimerange----------------------------------------------------------GDA080846...
表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 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的时间的差异.
谢谢! 展开
7个回答
展开全部
首先,在建立表的时候建立一个自增ID,或者用自己的方式建立ID累加作为表的索引,或者建立一个字段用getData()方法获取长日期+长时间。
如果是表里面写入操作,就要写存储过程,先判断Select Max(id) as 字段1 from [表名]中id是多少,然后把筛选出来的id和当前的@参数相对比;如果是在视图中做数据分析,就直接把select top 2 * from 表 order by id desc做成视图,对比它里面两条记录就可以。
如果是表里面写入操作,就要写存储过程,先判断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
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没有记录号的概念,也就是没有前后次序的概念。所以要确定记录的前后次序就依赖数据本身。
比如这个数据,如果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 表1.
比如这个数据,如果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 表1.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sql server里需要通过游标取出每条记录进行比较后把结果存储回去
oracle应该可以通过分析函数进行
oracle应该可以通过分析函数进行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |