用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