[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

转载于:https://www.cnblogs.com/VAllen/p/find-one-hour-on-oneday-of-mssql.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值