[MSSQL]找出一天數據中從第一條數據開始每累加1小時的數據

用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章