首页 > 解决方案 > Presto 自连接匹配日期列

问题描述

我试图弄清楚为什么 presto 返回以下结果。

我有以下 4 个日期的表格:

pickup_week (date)
'2019-10-28'
'2019-11-04'
'2019-11-06'
'2019-12-16'

当我尝试这个简单的自我加入时:

select 

w1.pickup_week as pu_w1,
w2.pickup_week as pu_w2

from week_user_list w1
join week_user_list w2 on w1.pickup_week = w2.pickup_week + interval '7' day 

order by w1.pickup_week

我得到以下结果:

w1.pickup_week   w2.pickup_week
2019-11-04       2019-10-28 
2019-11-11       2019-11-04 

如您所见,连接条件如下:

w1.pickup_week = w2.pickup_week + interval '7' day

但是我在返回表中看到的是相反的,w2.pickup_week 是前一周,而不是条件中所述的后一周。

在这种情况下,我想要的输出是:

w1.pickup_week   w2.pickup_week
2019-10-28       2019-11-04       
2019-11-04       2019-11-11        

我了解将条件恢复为

w1.pickup_week = w2.pickup_week - interval '7' day

会提供所需的输出,但我很困惑为什么以及为什么会返回这些类型的结果,条件陈述对我来说似乎不直观。

这里发生了什么,思考这个问题的正确方法是什么?

谢谢!

标签: sqlpresto

解决方案


你只是把逻辑倒过来了。使用-

select w1.pickup_week as pu_w1, w2.pickup_week as pu_w2
from week_user_list w1 join
     week_user_list w2
     on w1.pickup_week = w2.pickup_week - interval '7' day 
order by w1.pickup_week;

这清楚地表明该w1值比该值早一周w2。我认为您在这里对日期/时间的顺序和日期算术有一点困惑。


推荐阅读