用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