【问题标题】:Presto self join matching with a date columnPresto 自联接与日期列匹配
【发布时间】:2020-05-18 01:47:24
【问题描述】:

我试图弄清楚为什么 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

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

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

谢谢!

【问题讨论】:

    标签: sql presto


    【解决方案1】:

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

    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 的值。我认为您在这里只是对日期/时间的顺序和日期算术有点困惑。

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 2019-04-27
      • 2021-05-05
      • 2018-04-29
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多