Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中连接两个表,但两者之间的日期不同?_Mysql_Sql_Join - Fatal编程技术网

如何在mysql中连接两个表,但两者之间的日期不同?

如何在mysql中连接两个表,但两者之间的日期不同?,mysql,sql,join,Mysql,Sql,Join,我有一张桌子(GaugeCompare): 和另一张表(每日利率): 我想找到一种方法,根据日期相隔15天、30天和60天的不同,将这两个表连接起来。例如,我希望看到我的表格如下所示: Form15 | Form30 | Form60 | GaugeDate | RateDate_15 | Rate_15 | RateDate_30 |... --------------------------------------------------------------------------

我有一张桌子(GaugeCompare):

和另一张表(每日利率):

我想找到一种方法,根据日期相隔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  |...
我早上大部分时间都在玩弄它,并在上面搜索,但没有发现任何有意义的东西能让这项工作对我有用。有人有什么独特的方法来解决这个问题吗?

这就是你想要的吗

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所有人。我意识到我在连接上搞砸了。应该用左键而不是内键。可能会有帮助…嗯