IF OBJECT_ID(N'[dbo].[质量数据查询_测量数据发动机在线状态_下线统计_趋势分析]', N'P') IS NOT NULL
BEGIN
    DROP PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_下线统计_趋势分析]
END
GO

CREATE PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_下线统计_趋势分析]
    @开始时间 NVARCHAR(20),
    @结束时间 NVARCHAR(20),
    @订单号_check INT,
    @订单号 NVARCHAR(100),
    @产品型号代码_check INT,
    @产品型号代码 NVARCHAR(100),
    @聚合类型 NVARCHAR(10) = N'day'
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @startTime DATETIME
    DECLARE @endTime DATETIME

    SET @startTime = CONVERT(DATETIME, @开始时间 + ' 00:00:00', 120)
    SET @endTime = CONVERT(DATETIME, @结束时间 + ' 23:59:59', 120)

    ;WITH SourceData AS (
        SELECT
            订单号,
            发动机号,
            机型,
            离开时间 = CONVERT(DATETIME, 离开时间, 120)
        FROM 测量数据发动机在线状态
        WHERE 离开时间 IS NOT NULL
          AND CONVERT(DATETIME, 离开时间, 120) >= @startTime
          AND CONVERT(DATETIME, 离开时间, 120) <= @endTime
          AND (@订单号_check = 0 OR 订单号 = @订单号)
          AND (@产品型号代码_check = 0 OR 产品型号代码 = @产品型号代码)
    )
    SELECT
        时间段 = CASE
            WHEN @聚合类型 = N'hour' THEN CONVERT(NVARCHAR(13), 离开时间, 120) + N':00'
            ELSE CONVERT(NVARCHAR(10), 离开时间, 23)
        END,
        下线数量 = COUNT(1)
    FROM SourceData
    GROUP BY CASE
        WHEN @聚合类型 = N'hour' THEN CONVERT(NVARCHAR(13), 离开时间, 120) + N':00'
        ELSE CONVERT(NVARCHAR(10), 离开时间, 23)
    END
    ORDER BY MIN(离开时间)
END
GO
