Вставлять новые данные в таблицу всегда после последней записи в SQL - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть несколько таблиц с unix и столбцом time mez для идентификации.Они будут постоянно заполняться новыми данными (если быть точным, каждые 60 секунд).Я создал таблицу, назовем ее new_table из данных этих таблиц.Теперь я хочу обновить эту new_table.Но только с данными других таблиц, которые новее, чем последняя запись в new_table.

Так что мне не нужно перезаписывать new_table или собирать все данные, начиная со строки 1, поскольку это должно былоработать в течение многих лет.

Я попытался сделать несколько INSERT или UPDATE, но не могу понять, как определить условие SELECT и WHERE, для которых должны обновляться данные.Я очень неопытный в SQL.Заранее спасибо!

См. Следующий код о том, как я создал new_table:

USE database; /* select database */

CREATE TABLE new_table
AS
    SELECT
        table1_1min.time_unix, table1_1min.time_mez,
        /* add power consumption in kW rounded to two decimal places */
        ROUND(table1.P + table2.P + table3.P, 2) AS total
    FROM 
        table1_1min, table2_1min, table3_1min
    /* make sure same time stamp is used in every row*/
    WHERE
        table1_1min.time_unix = table2_1min.time_unix 
        AND table1_1min.time_unix = table3_1min.time_unix
    ORDER BY 
        table1_1min.time_unix;

1 Ответ

1 голос
/ 25 сентября 2019

самую последнюю строку в new_table можно найти с помощью

SELECT max(time_unix) FROM new_table

Зная это, вы, вероятно, сможете выяснить, как получить новые данные.Я не уверен, действительно ли вы хотите создавать новую таблицу каждый раз, когда вы делаете это.TRUNCATE может быть полезно для вас, но я думаю, что вы хотите что-то вроде этого:

INSERT INTO new_table ( time_unix, time_mez, total )
SELECT t1.time_unix, t1.time_mez, round(t1.p + t2.p + t3.p, 2) AS total
FROM table1_1min t1 JOIN table2_1min t2 ON (t1.time_unix = t2.time_unix) JOIN table3_1min t3 ON (t1.time_unix = t3.time_unix)
WHERE t1.time_unix > (SELECT max(time_unix) FROM new_table)
...