MySQL:最近加入

时间:2019-01-03 11:27:43

标签: mysql join

我有一个包含日期和值的表:

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 :(得分:1)

此查询将为您提供所需的结果。它JOIN将table_1上的table_2到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)

Demo on dbfiddle