Как объединить две таблицы в MySQL, но с разницей в датах между ними? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть одна таблица (GaugeCompare):

Form15 | Form30  | Form60  | GaugeDate
---------------------------------------
float  | caution | caution | 2018-10-08
float  | float   | caution | 2018-10-04
float  | caution | caution | 2018-10-02

И еще одна таблица (DailyInterestRates):

Rate | RateDate
-----------------
...more data above...
4.875| 2018-09-23
4.875| 2018-09-22
4.75 | 2018-09-21
5    | 2018-09-20
5    | 2018-09-19
5    | 2018-09-18
5    | 2018-09-17
4.875| 2018-09-16
4.75 | 2018-09-15
4.875| 2018-09-14
...more data below...

Я хочу найти способ объединения этих двух таблиц на основена разнице, где даты так много дней друг от друга на 15, 30 и 60 соответственно.Например, мне бы хотелось, чтобы моя таблица выглядела примерно так:

Form15 | Form30  | Form60  | GaugeDate  | RateDate_15 | Rate_15 | RateDate_30 |...
-----------------------------------------------------------------------------------
float  | caution | caution | 2018-10-08 | 2018-09-23  | 4.875   | 2018-09-08  |...
float  | float   | caution | 2018-10-04 | 2018-09-19  | 5       | 2018-09-04  |...
float  | caution | caution | 2018-10-02 | 2018-09-17  | 5       | 2018-09-02  |...

Большую часть утра я возился с ней и искал ее, но не нашел ничего значительного, чтосделал бы эту работу для меня.У кого-нибудь есть какие-то уникальные способы подойти к этому?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Это то, что вы хотите?

select gc.*, dir_15.ratedate, dir_15.rate,
       dir_30.ratedate, dir_30.rate, dir_60.ratedate, dir_60.rate
from GaugeCompare gc left join
     DailyInterestRates dir_15
     on gc.gaugedate = dir_15.ratedate + interval 15 day left join
     DailyInterestRates dir_30
     on gc.gaugedate = dir_30.ratedate + interval 30 day left join
     DailyInterestRates dir_60
     on gc.gaugedate = dir_60.ratedate + interval 60 day;
0 голосов
/ 19 октября 2018

Вы можете сделать три внешних соединения, как в:

select
    g.Form15, g.Form30, g.Form60, g.GaugeDate,
    r15.RateDate as RateDate_15, r15.Rate as Rate_15,
    r30.RateDate as RateDate_30, r30.Rate as Rate_30,
    r60.RateDate as RateDate_60, r60.Rate as Rate_60
  from GaugeCompare g
  left join DailyInterestRates r15 on r15.RateDate = g.GaugeDate - interval 15 day
  left join DailyInterestRates r30 on r30.RateDate = g.GaugeDate - interval 30 day
  left join DailyInterestRates r60 on r60.RateDate = g.GaugeDate - interval 60 day
0 голосов
/ 19 октября 2018
select GaugeCompare.form15, GaugeCompare.form30, GaugeCompare.form60, GaugeCompare.gaugeDate,
    d15.ratedate ratedate_15, d15.rate rate_15,
    d30.ratedate ratedate_30, d30.rate rate_30,
    d60.ratedate ratedate_60, d60.rate rate_60
from GaugeCompare
        left join DailyInterestRates d15 on GaugeCompare.gaugeDate = date_add(d15.rateDate, interval 15 day)
        left join DailyInterestRates d30 on GaugeCompare.gaugeDate = date_add(d30.rateDate, interval 30 day)
        left join DailyInterestRates d60 on GaugeCompare.gaugeDate = date_add(d60.rateDate, interval 60 day);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...