我有一个包含日期和值的表:
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
这可能是一个标准问题,但我似乎无法弄清楚。任何帮助表示赞赏。
答案 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)