MySQL: присоединиться к самой последней дате - PullRequest
0 голосов
/ 03 января 2019

У меня есть таблица, содержащая даты и значение:

table_1
-------
dt           x
2018-01-01   1
2018-01-06   4
2018-01-07   2
2018-01-12   3

И у меня есть еще одна таблица, содержащая даты:

table_2
-------
dt
2018-01-01
2018-01-03
2018-01-04
2018-01-06
2018-01-08
2018-01-09
2018-01-11

Я хочу создать новую таблицу my_joined_table, которая

  • содержит все даты от table_2 и
  • для каждой даты, содержит самое последнее значение table_1.x, которое не новее даты в данной строке

Таким образом, результат должен быть:

my_joined_table
---------------
dt           x
2018-01-01   1
2018-01-03   1
2018-01-04   1
2018-01-06   4
2018-01-08   2
2018-01-09   2
2018-01-11   2

Это, вероятно, стандартная проблема, но я не могу понять это.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 января 2019

Этот запрос даст вам желаемый результат. Это JOIN s от table_2 до table_1 для table_1 с максимальным значением dt, меньшим или равным значению table_2 dt:

SELECT t2.dt, t1.x
FROM table_2 t2
JOIN table_1 t1 ON t1.dt = (SELECT MAX(dt) FROM table_1 WHERE table_1.dt <= t2.dt)

Выход:

dt          x
2018-01-01  1
2018-01-03  1
2018-01-04  1
2018-01-06  4
2018-01-08  2
2018-01-09  2
2018-01-11  2

Чтобы создать таблицу my_joined_table, просто используйте запрос CREATE TABLE ... SELECT:

CREATE TABLE my_joined_table AS
SELECT t2.dt, t1.x
FROM table_2 t2
JOIN table_1 t1 ON t1.dt = (SELECT MAX(dt) FROM table_1 WHERE table_1.dt <= t2.dt)

Демонстрация по dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...