Сопоставить строки из двух таблиц со смещением по дате

Помогите, пожалуйста, со следующим заданием: Есть две таблицы.

введите сюда описание изображения

Задача: необходимо сопоставить строки двух таблиц таким образом, чтобы строке из первой таблицы соответствовала строка из второй таблицы с датой, смещенной на день раньше. Например, первой строке из первой таблицы (там, где дата равна 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 шт):

Автор решения: AlexanderSt

Для 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
→ Ссылка