相对于最新日期,从两个单独的表中创建一个表

时间:2019-05-05 00:16:36

标签: mysql sql finance

在我生命中,无法弄清楚该问题的语法。我需要将两个表合并为一个表...在那里没问题,但是在最近的约会中被绊倒了。本质上,我需要遍历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

如何解决此问题?

1 个答案:

答案 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;