又发一次关于求时间差的问题,昨天的有点错误,还请帮忙

oenpm 2008-09-12 09:15:39
一个求时间差的问题,要求得数为分钟
前提条件:按照时间F4进行排序后进行计算
例如 表t1
id f1 f2 f3 f4
1 1:10 1:20 1:30 2008-1-3
2 4:20 6:18 9:25 2008-1-5
3 2:05 2:23 2:40 2008-1-4
......
用一条SQL语句进行查询 结果如下
id f4 f2-f1 f3-f2 按照排序的下一条记录的F1-本条记录的F3
1 2008-1-3 10 10 35 /*2:05-1:30*/
3 2008-1-4 18 17 100 /*4:20-2:40*/
2 2008-1-5 118 187 ...

这个问题昨天发过,头疼的厉害,所以没发明白,害得大家白帮着忙乎了一回,不过分数照样给,这次应该不会错了,还希望各位师傅帮忙,谢谢了!
而且这次给100分,再次谢谢!
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
水族杰纶 2008-09-12
  • 打赏
  • 举报
回复
declare @t table(id int,f1 varchar(10),f2 varchar(10),f3 varchar(10),f4 varchar(10))
insert @t select 1, '1:10', '1:20', '1:30' , '2008-1-3'
insert @t select 2, '4:20', '6:18', '9:25' , '2008-1-5'
insert @t select 3, '2:05', '2:23', '2:40' , '2008-1-4'

SELECT id,
f4,
datediff(minute,f1,f2)[f2-f1],
datediff(minute,f2,f3) [f3-f2],
isnull(datediff(minute,f3,(SELECT TOP 1 f1 FROM @t WHERE convert(datetime,f4)>CONVERT(datetime,t.f4) ORDER BY convert(datetime,f4))),'')[f1-f3]
FROM @t t
ORDER BY convert(datetime,f4)

--select t1.ID,t1.f4



id f4 f2-f1 f3-f2 f1-f3
----------- ---------- ----------- ----------- -----------
1 2008-1-3 10 10 35
3 2008-1-4 18 17 100
2 2008-1-5 118 187 0

(3 row(s) affected)

mustudent 2008-09-12
  • 打赏
  • 举报
回复
按照排序的下一条记录的F1-本条记录的F3 這個要不要增加日期再減 還是直接的時間之間減
還有怎么確定下一條記錄哪 只是id大于現在的就算是下一條嗎?
chuifengde 2008-09-12
  • 打赏
  • 举报
回复
DECLARE @a table(id int, f1 varchar(20),f2 varchar(20),f3 varchar(20),f4 varchar(20))
INSERT @a SELECT 1 ,'1:10','1:20','1:30','2008-1-3'
UNION ALL SELECT 2 ,'4:20', '6:18', '9:25', '2008-1-5'
UNION ALL SELECT 3 ,'2:05', '2:23', '2:40', '2008-1-4'


SELECT id,
f4,
[f2-f1]=datediff(minute,f1,f2),
[f3-f2]=datediff(minute,f2,f3),
[f1-f3]=datediff(minute,f3,(SELECT TOP 1 f1 FROM @a WHERE convert(datetime,f4)>CONVERT(datetime,a.f4) ORDER BY convert(datetime,f4)))
FROM @a a
ORDER BY convert(datetime,f4)
--result
/*
id f4 f2-f1 f3-f2 f1-f3
----------- -------------------- ----------- ----------- -----------
1 2008-1-3 10 10 35
3 2008-1-4 18 17 100
2 2008-1-5 118 187 NULL

(所影响的行数为 3 行)*/
zoroz 2008-09-12
  • 打赏
  • 举报
回复
linzi_0535 2008-09-12
  • 打赏
  • 举报
回复
帮你顶
tianhuo_soft 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chuifengde 的回复:]
SQL codeDECLARE @a table(id int, f1 varchar(20),f2 varchar(20),f3 varchar(20),f4 varchar(20))
INSERT @a SELECT 1 ,'1:10','1:20','1:30','2008-1-3'
UNION ALL SELECT 2 ,'4:20', '6:18', '9:25', '2008-1-5'
UNION ALL SELECT 3 ,'2:05', '2:23', '2:40', '2008-1-4'


SELECT id,
f4,
[f2-f1]=datediff(minute,f1,f2),
[f3-f2]=datediff(minute,f2,f3),
[f1-f3]=da…
[/Quote]

没问题啊

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧