Presto самостоятельное соединение сопоставления со столбцом даты - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь выяснить, почему 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 возвращает результаты такого типа, мне кажется, что это условие не интуитивно понятно.

Что здесь происходит и как правильно думать об этом?

Спасибо!

1 Ответ

0 голосов
/ 01 февраля 2020

У вас просто логика c задом наперед. Используйте -:

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. Я думаю, что у вас просто небольшая путаница в отношении порядка даты / времени и арифметики даты c.

...