Вставлять новые данные в таблицу всегда после последней записи в SQL

У меня есть несколько таблиц со столбцами времени 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;

person Kai    schedule 25.09.2019    source источник
comment
Я предполагаю, что ваше второе условие в предложении where должно сравниваться с table3_1min.time_unix?   -  person Islingre    schedule 25.09.2019
comment
О, извини, мой плохой. Да, ты прав!   -  person Kai    schedule 25.09.2019
comment
Плохие привычки, от которых следует избавиться: использование старых стиль JOINs — старый стиль разделенного запятыми списка таблиц был заменен на правильный синтаксис ANSI JOIN в ANSI-92 Стандарт SQL (более 25 лет назад), и его использование не рекомендуется   -  person marc_s    schedule 27.09.2019


Ответы (1)


самую последнюю строку в 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)
person mankowitz    schedule 25.09.2019