下面有一组Period_Key的时间, 要求求出每两个相邻Load_Time的时间差。
Period_Key Load_Time
20160101 2016-07-12 08:44:07
20160102 2016-07-12 08:47:08
20160103 2016-07-12 08:50:05
20160104 2016-07-12 08:52:59
20160105 2016-07-12 08:55:55
20160106 2016-07-12 08:58:50
sql求出每两个相邻的时间差
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 问sql以及数据库相关的题,请先说明使用的数据库类型以及数据库版本,因为不同数据库支持的sql写法不一样;
还有,需要提供相关的create table 和insert的sql,因为不同的字段类型处理方式也会不一样。
假设你用的数据库是oracle,支持开窗函数,date类型也可以直接相减,那么可以使用lag或者lead来查询上一行或者下一行select a.*, lag(a.Load_Time) over(order by a.Period_Key) 上一行的时间, lag(a.Load_Time) over(order by a.Period_Key)- a.Load_Time 时间差天数, (lag(a.Load_Time) over(order by a.Period_Key)- a.Load_Time)*24*60*60 时间差秒数 from 表 a
如果是sqlserver,在使用开窗函数获得上一行的时间后,用 datediff(second, 开始日期,结束日期) 来计算时间差
select a.*, lag(a.Load_Time) over(order by a.Period_Key) 上一行的时间, datediff(second, lag(a.Load_Time) over(order by a.Period_Key),a.Load_Time) 时间差秒数 from 表 a
但sqlserver2008版本太老了,不确定是否有lag函数,当前没有环境可以测试
微软官方都没有提供这个版本的文档了
刚在官网一个角落找到了sqlserver2008r2的文档,里面没有介绍有关开窗函数的内容
内置函数 (Transact-SQL) | Microsoft Docs https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms174318(v=sql.105)除了使用开窗函数以外,要在本行查询到非本行数据,只能使用自关联了,
针对此题,先把第一个字段转换成日期类型,然后这个表自己join自己,关联on的条件是前一个表的日期等于后一个表的日期加一天,这样就能把上下相邻的两行放到同一行里了,此时可以使用datediff函数计算时间差本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 matlab实现基于主成分变换的图像融合。
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制
- ¥20 usb设备兼容性问题
- ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊