[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
作者:VAllen
出处:http://www.cnblogs.com/vallen
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
唯有偏执者得以生存。
posted @ 2019-09-09 10:12  VAllen  阅读(456)  评论(0编辑  收藏  举报