如何从一天数据中提取每增加1小时的数据?

摘要:用Sql Server找出一天数据中从第一条数据开始每累加1小时的数据 -- -- Author: Allen Cai -- Create date: 2018-07-20 15:59 -- ALTER PROCEDURE PLMS_A_L
用Sql Server找出一天数据中从第一条数据开始每累加1小时的数据 -- ============================================= -- Author: Allen Cai -- Create date: 2018-07-20 15:59 -- ============================================= ALTER PROCEDURE PLMS_A_Logistics_Test AS BEGIN DECLARE @i INT; --当前索引行 DECLARE @rowCount INT; --总行数 DECLARE @skipCount INT; --跳过行数 DECLARE @行号 INT; DECLARE @签收时间 DATETIME; DECLARE @运单号 NVARCHAR(50); DECLARE @returnTable TABLE ( 运单号 NVARCHAR(50), 签收时间 DATETIME ); DECLARE @tmpTable TABLE ( 行号 INT, 唯一序列号 VARCHAR(50), 签收时间 DATETIME, 运单号 NVARCHAR(50) ); INSERT @tmpTable SELECT r.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY 签收时间) AS 行号, t.* FROM [dbo].[A_Logistics_Test] t WHERE 签收时间 >= '2018-07-19' AND 签收时间 < '2018-07-20' ) AS r; SELECT @rowCount = COUNT(行号) FROM @tmpTable; --总行数 PRINT @rowCount; --打印总行数 SET @i = 1; WHILE @rowCount >= @i BEGIN SELECT @行号 = 行号, @签收时间 = 签收时间, @运单号 = 运单号 FROM @tmpTable WHERE 行号 = @i; INSERT @returnTable SELECT @运单号, @签收时间; SELECT @skipCount = COUNT(行号) FROM @tmpTable WHERE 签收时间 >= @签收时间 AND 签收时间 < DATEADD(HOUR, 1, @签收时间); SET @i = @i + @skipCount; PRINT N'当前索引行' + CONVERT(VARCHAR, @i); --打印索引行 END; SELECT * FROM @returnTable; END; GO