#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. Большое вам спасибо.