У меня есть две таблицы с соответствующими столбцами
РЕДАКТИРОВАТЬ: мне нужны данные из обеих таблиц. Если в Таблице 1 нет события для отметки времени, мне нужна запись на дисплее. Но если есть события, соответствующие TimeStamp из таблицы 2 (startTime в запросе)
Table1:
Sensor ID TimeStamp Payload1 Payload2
Table2:
Sensor ID TimeStamp EventName EventValue State
А затем получим результат rest, который объединит две таблицы:
Result:
Sensor ID TimeStamp Payload1 Payload2 EventName EventValue State
Я пытаюсь найти SQL, который даст мне правильный набор результатов.
В настоящее время я получаю повторяющиеся строки при попытке. результирующий набор будет выглядеть примерно так:
Sensor ID TimeStamp Payload1 Payload2 EventName EventValue State
2 17/06/2019 11:21:47 AM 205.8 237.9 NULL NULL NULL
2 17/06/2019 11:21:49 AM 205.8 244.1 NULL NULL NULL
2 17/06/2019 11:21:51 AM 205.8 235.8 NULL NULL NULL
2 17/06/2019 11:21:51 AM NULL NULL Event1 205.8 Critical
Я пытаюсь получить что-то вроде этого:
Sensor ID TimeStamp Payload1 Payload2 EventName EventValue State
2 17/06/2019 11:21:47 AM 205.8 237.9 NULL NULL NULL
2 17/06/2019 11:21:49 AM 205.8 244.1 NULL NULL NULL
2 17/06/2019 11:21:51 AM 205.8 235.8 Event1 205.8 Critical
Запрос, который я использую, выглядит примерно так
SELECT SensorID,
[TimeStamp],
Payload1 AS Payload1,
Payload2 AS Payload2,
INTO #TempTable1
FROM Feed.data
WHERE AssetId = 1
AND [TimeStamp] > GETDATE() - 0.05
ORDER BY [TimeStamp] ASC;
SELECT E.SensorID,
E.StartTime AS [TimeStamp],
ET.Name AS EventName,
E.EventValue,
E.State
INTO #TempTable2
FROM [Event] E
JOIN [EventType] ET
ON E.EventTypeId = ET.Id
WHERE E.SensorID = 1
AND ET.Id IN ( 1, 2 )
AND StartTime > GETDATE() - 0.05
--AND E.Severity != 'Normal'
ORDER BY [TimeStamp] ASC;
SELECT CASE
WHEN T1.SensorID IS NOT NULL THEN
T1.SensorID
ELSE
T2.SensorID
END AS AssetId,
CASE
WHEN [TimeStamp] IS NOT NULL THEN
TimeStamp
ELSE
EventTimeStamp
END AS TimeStamp,
Payload1,
Payload2,
T2.EventName,
T2.EventValue,
T2.State
FROM #TempTable1 T1
FULL OUTER JOIN #TempTable2 T2
ON T1.TimeStamp = T2.EventTimeStamp
AND T1.SensorID = T2.SensorID
ORDER BY [TimeStamp] ASC;
--Select * from #TempTable1
--Select * from #TempTable2
DROP TABLE #TempTable1;
DROP TABLE #TempTable2;