首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎的找出出几个记录中,相隔时间最长的那个两个记录和相隔时间(多少分钟)

2013-07-01 
怎样找出出几个记录中,相隔时间最长的那个两个记录和相隔时间(多少分钟)本帖最后由 linjimu 于 2013-05-23

怎样找出出几个记录中,相隔时间最长的那个两个记录和相隔时间(多少分钟)
本帖最后由 linjimu 于 2013-05-23 17:36:38 编辑 怎样找出出几个记录中,相隔时间最长的那个两个记录和相隔时间(多少分钟)
比如:表T:
id      RecordTime 
1     2013-05-01 8:01
2     2013-05-01 9:30
3     2013-05-01 10:02
4     2013-05-01 11:23

找出4个记录的 RecordTime 相隔时间最大的那个记录和相隔时间。
1和2 相隔 89分钟 (1小时29分)
2和3 相隔 32分钟
3和4 相隔 81分钟 (1小时21分钟)
找到后,插入到另外一个表里面:表M:
TimeFrom              TimeTo               IntMaxTime
2013-05-01 8:01       2013-05-01 9:30       89

到时会用在存储过程里面,可能涉及到游标,临时表。

谢谢!
[解决办法]


declare @t table( id int,RecordTime datetime)
insert into @t 
select 1,'2013-05-01 8:01' union all
select 2,'2013-05-01 9:30' union all
select 3,'2013-05-01 10:02' union all
select 4,'2013-05-01 11:23'

;with a as(
select top 100 percent a.id,a.RecordTime,
       (select top 1 RecordTime from @t B where id<a.id order by id desc ) RecordTime_p
from @t A
order by id 
)
select top 1 RecordTime_p TimeFrom,RecordTime TimeTo,datediff(minute,RecordTime_p,RecordTime) IntMaxTime 
from a
order by IntMaxTime desc 

[解决办法]
SELECT TOP 1 *,DATEDIFF(mi,a.[RecordTime],b.[RecordTime]) AS df FROM #tb a, #tb b
WHERE a.id=b.id-1
ORDER BY  df DESC 

这样可以吗?恐怕你的id不连续
[解决办法]
2005 用 row_number 生成连续的id 就可以了


--> 测试数据:#tb
IF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL DROP TABLE #tb
GO 
CREATE TABLE #tb([id] INT,[RecordTime] DATETIME)
INSERT #tb
SELECT 1,'2013-05-01 8:01' UNION ALL
SELECT 3,'2013-05-01 9:30' UNION ALL
SELECT 5,'2013-05-01 10:02' UNION ALL
SELECT 9,'2013-05-01 11:23'
--------------开始查询--------------------------
;WITH cte AS
(
SELECT  *,row_id=ROW_NUMBER() OVER(ORDER BY [id]) FROM #tb 
)
SELECT TOP 1 a.*,DATEDIFF(mi,a.[RecordTime],b.[RecordTime]) AS df FROM cte a, cte b
WHERE a.row_id=b.row_id-1
ORDER BY  df DESC 
----------------结果----------------------------
/* 
idRecordTimerow_iddf


12013-05-01 08:01:00.000189
*/

[解决办法]

引用:
谢谢了!如果没有ID这一列,处理起来会不会很难呢。

row_number 里面用时间那一列排序 
生成一个id出来。
[解决办法]

declare @t table

id int,
RecordTime datetime

insert into @t  
select 1,'2013-05-01 8:01' union all
select 2,'2013-05-01 9:30' union all
select 3,'2013-05-01 10:02' union all
select 4,'2013-05-01 11:23' 
select top 1 a.RecordTime as TimeFrom,b.RecordTime as TimeTo,
datediff(minute,a.RecordTime,b.RecordTime)maxtime
from @t a,@t b where a.id+1 = b.id 
order by datediff(minute,a.RecordTime,b.RecordTime) desc

[解决办法]
有SQL 的应该OK

热点排行