Как вычесть два значения столбца из двух таблиц и вставить в 3-ю таблицу

#sql #database #sqlite #subquery #sql-insert

#sql #База данных #sqlite #подзапрос #sql-вставка

Вопрос:

Я использую SQLite

Таблица A: один столбец для хранения вычитаемого значения (разницы) Таблица B: один столбец с меткой времени unix (OFF_time) Таблица C: один столбец с меткой времени unix (ON_time)

НЕОБХОДИМО вычесть временные метки столбцов OFF_time и ON_time из таблиц B и C соответственно и сохранить в A.

Это то, что я пробовал:

  insert into A (difference) select B.OFF_time-C.ON_time from B,C;
  

[ОТРЕДАКТИРОВАНО]

и не получил ошибки, но таблица A пуста и не обновляется с разницей.

ПРИМЕР ДАННЫХ:

ТАБЛИЦА C: ON_time

ТАБЛИЦА B: OFF_time

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ: ТАБЛИЦА A:

разница (имя столбца в таблице A)

622

1024

608

398

458

Комментарии:

1. Пожалуйста, предоставьте примеры данных и желаемые результаты. Я сомневаюсь, что вы действительно хотите декартово произведение.

2. Ваш запрос, хотя он логически неверен, синтаксически корректен. Похоже, что запрос, который вы разместили здесь, не несет ответственности за эту ошибку. Проверьте в другом месте вашего кода.

3. @forpas да, я нашел опечатку и изменил ее, теперь у меня другая проблема: (

4. @GordonLinoff Я добавил образцы данных и желаемый результат. Надеюсь, это поможет.

Ответ №1:

Вы можете использовать функцию окна ROW_NUMBER () для объединения B и C:

 insert into A (difference) 
select t1.OFF_time - t2.ON_time 
from (select *, row_number() over (order by OFF_time) rn from B) t1
inner join (select *, row_number() over (order by ON_time) rn from C) t2
on t2.rn = t1.rn;
  

Комментарии:

1. ВАУ! спасибо, что сработало. Если вы не возражаете, можете ли вы объяснить, что вы сделали в простых терминах?

2. В каждой из таблиц B и C функция row_number() возвращает номер каждой строки, упорядоченной по времени. Затем 2 запроса объединяются на основе этого числа: строка 1 из B со строкой 1 из c, строка 2 из B со строкой 2 из c и вычитаются 2 столбца из 2 таблиц.

3. Большое вам спасибо.