INSERT INTO #tmp из запроса CTE - PullRequest
0 голосов
/ 03 февраля 2019

Я хочу иметь возможность вставлять результаты этого запроса CTE во временную таблицу, чтобы суммировать столбец Total.

CREATE TABLE #tmp
(
    SerialNumber NVARCHAR(50),
    StartDateTime NVARCHAR(50),
    EndDateTime NVARCHAR(50),
    Total NVARCHAR(50)
)

;WITH cte1 AS 
(
    SELECT 
        *, 
        CASE                
           WHEN Temperature > @maxthreshold AND LAG(Temperature) OVER (PARTITION BY SerialNumber ORDER BY CombineDateTime) IS NULL THEN 1               
           WHEN Temperature <= @maxthreshold  AND LEAD(Temperature) OVER (PARTITION BY SerialNumber ORDER BY CombineDateTime) > @maxthreshold THEN 1              
           WHEN Temperature <= @maxthreshold  AND  LAG(Temperature) OVER (PARTITION BY SerialNumber ORDER BY CombineDateTime) > @maxthreshold THEN 1
        END AS chg
    FROM 
        [RawData]
    WHERE 
        SerialNumber = @_Serial
        AND CombineDateTime BETWEEN @_DateFrom AND @_DateTo
), cte2 AS 
(
    SELECT 
        *, 
        SUM(chg) OVER (PARTITION BY SerialNumber ORDER BY CombineDateTime) AS grp
    FROM 
        cte1
)
INSERT INTO #tmp
    SELECT
        SerialNumber,
        MIN(CombineDateTime) AS StartDateTime,
        MAX(CombineDateTime) AS EndDateTime,
        DATEDIFF(SECOND, MIN(CombineDateTime), MAX(CombineDateTime)) / 60.0 AS 'Total'
    FROM 
        cte2
    GROUP BY 
        SerialNumber, grp
    HAVING 
        MAX(Temperature) > @maxthreshold)

SELECT * 
FROM #tmp

DROP TABLE #tmp

Я пытался поместить вставку в разные места, но этоне вставьте, я попробовал следующие ответы.Меня смущает, почему вставка не работает, поскольку она находится вне рекурсии.

Ответ 1 Ответ 2

TIA

...