如何在mysql中连接两个表,但两者之间的日期不同?
我有一张桌子(GaugeCompare): 和另一张表(每日利率): 我想找到一种方法,根据日期相隔15天、30天和60天的不同,将这两个表连接起来。例如,我希望看到我的表格如下所示:如何在mysql中连接两个表,但两者之间的日期不同?,mysql,sql,join,Mysql,Sql,Join,我有一张桌子(GaugeCompare): 和另一张表(每日利率): 我想找到一种方法,根据日期相隔15天、30天和60天的不同,将这两个表连接起来。例如,我希望看到我的表格如下所示: Form15 | Form30 | Form60 | GaugeDate | RateDate_15 | Rate_15 | RateDate_30 |... --------------------------------------------------------------------------
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 |...
我早上大部分时间都在玩弄它,并在上面搜索,但没有发现任何有意义的东西能让这项工作对我有用。有人有什么独特的方法来解决这个问题吗?这就是你想要的吗
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);
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;
这是你想要的吗
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;
可以进行三次外部联接,如中所示:
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
可以进行三次外部联接,如中所示:
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
获胜者是Daniel Blais,拥有最干净/正确的sql和速度。获胜者是Daniel Blais,拥有最干净/正确的sql和速度。谢谢大家。我意识到我在连接上搞砸了。应该用左键而不是内键。可能会有帮助…duhThanks所有人。我意识到我在连接上搞砸了。应该用左键而不是内键。可能会有帮助…嗯