在我生命中,无法弄清楚该问题的语法。我需要将两个表合并为一个表...在那里没问题,但是在最近的约会中被绊倒了。本质上,我需要遍历T1的每一行,然后在T2中找到同一股票行情的最新日期,然后在下面的列结构中将两个表连接在一起。基本上,将最近的一天的信息与T1中记录的日期内联显示。
两个mysql表:
T1
Ticker OpenPrice Date AAPL 220 2019-03-01 GOOG 300 2019-03-25 AMZN 950 2019-03-17 AMZN 925 2019-03-29 AAPL 250 2019-03-07 GOOG 355 2019-03-29
T2
Ticker ClosePrice Date AAPL 220 2019-03-02 GOOG 335 2019-03-21 AMZN 925 2019-03-24 AMZN 955 2019-03-08 AAPL 250 2019-03-18 GOOG 340 2019-03-26 TSLA 1 2019-03-04
需要新加入的表(列顺序并不重要): 股票代号| OpenPrice(从T1起)|日期(从T1起)| ClosePrice(从T2起)|最近的日期(从T2开始)
因此,如果联接以上表,结果将是: 注意:T1中的第一个AAPL记录不会显示,因为T2上的03-01之前没有日期
GOOG 300 2019-03-25 335 2019-03-21 AMZN 950 2019-03-17 955 2019-03-08 AMZN 925 2019-03-29 925 2019-03-24 AAPL 250 2019-03-07 220 2019-03-02 GOOG 355 2019-03-29 340 2019-03-26
如何解决此问题?
答案 0 :(得分:1)
您可以使用相关子查询来获取所需的日期:
select t1.*,
(select max(t2.date)
from t2
where t2.ticker = t1.ticker and
t2.date <= t1.date
) as t2_date
from t1;
然后,将其重新加入以获得完整记录:
select . . . -- choose the columns you want
from (select t1.*,
(select max(t2.date)
from t2
where t2.ticker = t1.ticker and
t2.date <= t1.date
) as t2_date
from t1
) t1 join
t2
on t2.ticker = t1.ticker and t2.date = t1.t2_date;