首页 新闻 会员 周边 捐助

sql由时间1算出时间2

0
悬赏园豆:100 [待解决问题]

如时间字段1,从2022-07-13 00:00:00到2022-07-13 02:00:00有10行数据升序排序,用这个字段计算得到字段2:字段2的第一行直接等于字段1的第一行,第二行开始用计算得到:字段1的第2行减去字段2的第1行如果小于等于五秒,则选择字段2的第一行,否则选字段1第2行保存至字段2第二行,以此类推,直到字段1第n行和字段2第n-1行计算完毕

问题补充:

需要用sql解决

mnq的主页 mnq | 初学一级 | 园豆:-36
提问于:2022-08-10 09:30

例如,时间1:
2022-06-10 23:39:16
2022-06-10 23:39:18
2022-06-10 23:39:18
2022-06-10 23:39:21
2022-06-10 23:39:22
2022-06-10 23:39:22
2022-06-10 23:39:29
得到结果时间2:
2022-06-10 23:39:16
2022-06-10 23:39:16
2022-06-10 23:39:16
2022-06-10 23:39:16
2022-06-10 23:39:22
2022-06-10 23:39:22
2022-06-10 23:39:29

mnq 2年前
< >
分享
所有回答(3)
0

你说的是 sql查询, 还是T-sql 编程 ,明显你这个逻辑判断,还有 循环, 要用到 t-sql ,要定义变量写逻辑的 ,不可能直接通过sql查询一步到位

兴想事成 | 园豆:540 (小虾三级) | 2022-08-10 13:03

sql编程用循环的话性能太低了,有没有sql查询可以实现的?或者有高效的循环方法也可以

支持(0) 反对(0) mnq | 园豆:-36 (初学一级) | 2022-08-10 17:08
0

不需要循环的方法,思考半小时的结果

CREATE TABLE #FF(ID INT IDENTITY(1,1),DT DATETIME,groupname INT,DT2 DATETIME)

INSERT INTO #FF(DT)
SELECT '2022-06-10 23:39:16' UNION ALL
SELECT '2022-06-10 23:39:18' UNION ALL
SELECT '2022-06-10 23:39:18' UNION ALL
SELECT '2022-06-10 23:39:21' UNION ALL
SELECT '2022-06-10 23:39:22' UNION ALL
SELECT '2022-06-10 23:39:22' UNION ALL
SELECT '2022-06-10 23:39:29'

DECLARE @dt1 DATETIME
SELECT @dt1=DT FROM #FF WHERE ID=1

UPDATE #FF SET groupname=CEILING(DATEDIFF(SECOND,@dt1,DT)/5.0)
UPDATE #FF SET groupname=1 WHERE groupname=0

UPDATE A SET A.DT2=B.MDT
FROM #FF A,(SELECT groupname,MIN(DT) MDT FROM #FF GROUP BY groupname) B
WHERE A.groupname=B.groupname

SELECT TOP(100) * FROM #FF

二洋 | 园豆:267 (菜鸟二级) | 2022-09-24 17:29
0

复杂的sql处理,用查询处理很难,性能也无法保证,可以考虑使用自定义函数,mysql这边我是用来解决了一个需要循环处理的问题

bug厌恶者 | 园豆:229 (菜鸟二级) | 2022-10-27 11:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册