#sql #insert #sql-insert
#sql #вставить #sql-вставка
Вопрос:
У меня есть две таблицы в SQL. Мне нужно добавить строки из одной таблицы в другую. Таблица, в которую я добавляю строки, выглядит следующим образом:
timestamp, deviceID, value
2020-10-04, 1, 0
2020-10-04, 2, 0
2020-10-07, 1, 1
2020-10-08, 2, 1
Но я должен добавить строку в эту таблицу, если состояние для конкретного DeviceID было изменено по сравнению с последней меткой времени.
Например, эта запись «2020-10-09, 2, 1» не будет добавлена, потому что значение не было изменено для DeviceID = 2 и last timestamp = «2020-10-08». В то же время будет добавлена запись «2020-10-09, 1, 0», поскольку значение для DeviceID = 1 было изменено на 0.
У меня проблема с написанием запроса для этой логики. Я написал что-то вроде этого:
insert into output
select *
from values
where value != (
select value
from output
where timestamp = (select max(timestamp) from output) and output.deviceID = values.deviceID)
Конечно, это не работает из-за последней части запроса «и output.DeviceID = values.DeviceID».
На самом деле проблема в том, что я не знаю, как взять значение из таблицы «output», где DeviceID такой же, как в строке, которую я пытаюсь вставить.
Комментарии:
1. Пометьте свой вопрос своей СУБД. Предоставьте
values
образец таблицы.
Ответ №1:
Я бы использовал order by
и что-то, чтобы ограничить одну строку:
insert into output
select *
from values
where value <> (select o2.value
from output o2
where o2.deviceId = v.deviceId
order by o2.timestamp desc
fetch first 1 row only
);
Приведенное выше является стандартным SQL. У определенных баз данных могут быть другие способы выразить это, такие как limit
или top (1)
.