Mysql SQL在两列上连接,第一列上有一个变体

Mysql SQL在两列上连接,第一列上有一个变体,mysql,sql,hive,Mysql,Sql,Hive,我有两张桌子: 表1:平面图 ID Date Count 3 2017-01-01 10 2 2017-02-03 15 10 2017-01-30 8 表2:计划B ID Date Value 3 2017-01-02 11 2 2017-02-04 12 21 2017-01-30 3 3 2017-02-03 33 我想做的是连接(ID和Date)列上的

我有两张桌子:

表1:平面图

ID    Date       Count
 3   2017-01-01     10
 2   2017-02-03     15
10   2017-01-30      8
表2:计划B

ID    Date       Value
 3   2017-01-02     11
 2   2017-02-04     12
21   2017-01-30      3
 3   2017-02-03     33
我想做的是连接(ID和Date)列上的两个表。 但是,在日期上,我想使用表1上的日期的第二天。 因此,联接表应如下所示:

 PlanA.ID    PlanA.Date   PlanB.Date  PlanA.Count   PlanB.Value
  3        2017-01-01     2017-01-02       10            11
  2        2017-02-03     2017-02-04       15            12    
这可能吗? 任何建议都将不胜感激

是的,有可能:

select
  PlanA.ID,
  PlanA.Date,
  PlanB.Date,
  PlanA.Count,
  PlanB.Value
from
  PlanA inner join PlanB
  on (
    PlanA.ID = PlanB.ID
    and
    PlanA.Date + INTERVAL 1 DAY = PlanB.Date
  )

如果Date是Date类型的列,
+INTERVAL 1 DAY
将返回给定列的第二天,然后您可以执行连接。

Date列看起来像是有效的MySQL日期格式。即使date列是char或varchar type+INTERVAL 1 DAY,也可以正常工作。@RaymondNijland是的,MySQL应该自动将其转换为日期。。。谢谢谢谢@fthiella。我是否可以为配置单元查询应用相同的脚本?由于我的配置单元版本不支持间隔,是否有其他方法不使用间隔?使用
ADDDATE
和整数连用天:
ADDDATE(PlanA.Date,1)
。在您的示例数据中,“下一个日期”总是第二天,但不一定如此,对吗?如果ID 3没有2017-01-02,我们会选择2017-01-03作为2017-01-01之后的下一个日期,是吗?不是,总是第二天。因此,如果没有2017-01-02,则不应选择任何。