Объединить таблицы с датами с интервалом в 5 минут (получить среднее значение) - PullRequest
0 голосов
/ 26 апреля 2018

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

Этот запрос должен быть выполнен с использованием 2 Common table expressions, каждое общее табличное выражение должно получить timestamps и group them на AVG, чтобы они могли соответствовать

Freezer |       Timestamp      | Temperature_1
 1      2018-04-25 09:45:00       10  
 1      2018-04-25 09:50:00       11   
 1      2018-04-25 09:55:00       11


Freezer |       Timestamp      | Temperature_2
 1      2018-04-25 09:46:00       15  
 1      2018-04-25 09:52:00       13   
 1      2018-04-25 09:59:00       12   

Мой желаемый результат будет:

Freezer |       Timestamp      | Temperature_1 | Temperature_2
 1      2018-04-25 09:45:00       10             15
 1      2018-04-25 09:50:00       11             13
 1      2018-04-25 09:55:00       11             12

Текущий запрос, над которым я работаю:

WITH Temperatures_1 (
SELECT Freezer, Temperature_1, Timestamp
FROM TABLE_A
),

WITH Temperatures_2 (
SELECT Freezer, Temperature_2, Timestamp
FROM TABLE_B
)

SELECT A.Freezer, A.Timestamp, Temperature_1, Temperature_2
FROM Temperatures_1 as A
RIGHT JOIN Temperatures_2 as B
ON A.FREEZER = B.FREEZER
WHERE A.Timestamp = B.Timestamp 

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы должны изменить ключ соединения двух таблиц, добавив метку времени. Временная метка, которую вам необходимо приблизительно определить для даты и времени в обеих боковых таблицах A и B. Сначала вы должны проверить, что значение даты и времени левой таблицы (A) меньше 2,5 минут, а затем приблизиться к 5 минутам. Если оно больше, то приблизительное значение до следующих 5 минут. То же самое вы должны сделать на правом столе (B). Или вы можете сделать это в CTE, и правильное соединение останется таким же, как ваш запрос.

0 голосов
/ 26 апреля 2018

Возможно, вы захотите изменить критерии объединения вместо фильтрации выходных данных. Используйте BETWEEN, чтобы заключить в скобки значение соединения на отметках времени. Я выбрал +/- 150 секунд, потому что это половина 2-1 / 2 минут по обе стороны (5-минутный диапазон, чтобы соответствовать). Вам может понадобиться что-то другое.

;WITH Temperatures_1 (
SELECT Freezer, Temperature_1, Timestamp
FROM TABLE_A
),

WITH Temperatures_2 (
SELECT Freezer, Temperature_2, Timestamp
FROM TABLE_B
)

SELECT A.Freezer, A.Timestamp, Temperature_1, Temperature_2
FROM Temperatures_1 as A
RIGHT JOIN Temperatures_2 as B
ON A.FREEZER = B.FREEZER 
    AND A.Timestamp BETWEEN (DATEADD(SECOND, -150, B.Timestamp) 
                            AND (DATEADD(SECOND, 150, B.Timestamp)
...