代码之家  ›  专栏  ›  技术社区  ›  Elias Strehle

MySQL:在最近日期加入

  •  -1
  • Elias Strehle  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  1
  •   Nick SamSmith1986    6 年前

    此查询将为您提供所需的结果。它 JOIN 表1上表2到表1的最大值 dt 小于或等于表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