你说的是 sql查询, 还是T-sql 编程 ,明显你这个逻辑判断,还有 循环, 要用到 t-sql ,要定义变量写逻辑的 ,不可能直接通过sql查询一步到位
sql编程用循环的话性能太低了,有没有sql查询可以实现的?或者有高效的循环方法也可以
不需要循环的方法,思考半小时的结果
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
复杂的sql处理,用查询处理很难,性能也无法保证,可以考虑使用自定义函数,mysql这边我是用来解决了一个需要循环处理的问题
例如,时间1:
– mnq 2年前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