Сопоставить строки из двух таблиц со смещением по дате
Помогите, пожалуйста, со следующим заданием: Есть две таблицы.
Задача: необходимо сопоставить строки двух таблиц таким образом, чтобы строке из первой таблицы соответствовала строка из второй таблицы с датой, смещенной на день раньше. Например, первой строке из первой таблицы (там, где дата равна 03.10.2022) должна соответствовать строка из второй таблицы (там, где дата равна 02.10.2022). Значения в первых двух столбцах в первой таблице должны быть равны значениям в первых двух столбцах во второй таблице.
Как пробовал и что не подошло:
select table_1.col1, table_1.col2, table_1.col3, table_2.col4, table_2.col5, table_2.col6
from table_1
join table_2 on table_1.col1 = table_2.col4 and table_1.col2 = table_2.col5
and table_2.col6 = select (table_1.col3 - interval '1 day') from table_1
Выдает ошибку, что подзапрос возвращает n записей, а не одну. Это понятно. Но как сделать иначе пока не пойму.
Ответы (1 шт):
Для MySql выглядит так:
-- INIT database
CREATE TABLE table_1 (
col1 INT ,
col2 INT,
col3 Date
);
CREATE TABLE table_2 (
col4 INT ,
col5 INT,
col6 Date
);
INSERT INTO table_1(col1, col2, col3) VALUES (362205, 25, '2022.10.03');
INSERT INTO table_1(col1, col2, col3) VALUES (362205, 25, '2022.10.04');
INSERT INTO table_1(col1, col2, col3) VALUES (362205, 15, '2022.10.05');
INSERT INTO table_2(col4, col5, col6) VALUES (362205, 25, '2022.10.02');
INSERT INTO table_2(col4, col5, col6) VALUES (362205, 25, '2022.10.03');
INSERT INTO table_2(col4, col5, col6) VALUES (362205, 23, '2022.10.04');
-- QUERY database
select table_1.col1, table_1.col2, table_1.col3, table_2.col4, table_2.col5, table_2.col6
from table_1
join table_2 on table_1.col1 = table_2.col4 and table_1.col2 = table_2.col5
and table_2.col6 = DATE_ADD(table_1.col3,INTERVAL -1 DAY)
и результат:
col1 col2 col3 col4 col5 col6
362205 25 2022-10-03 362205 25 2022-10-02
362205 25 2022-10-04 362205 25 2022-10-03