Ошибка SQL в снежинке - недопустимые типы аргументов для функции '-': (TIMESTAMP_NTZ (9), TIMESTAMP_NTZ (9)) - PullRequest
0 голосов
/ 07 октября 2019

Я получаю эту ошибку, когда пытаюсь вычесть метки времени и выполнить оконную функцию (lead, lag и partition by):

Недопустимые типы аргументов для функции '-': (TIMESTAMP_NTZ (9), TIMESTAMP_NTZ (9))

Пробовал date_diff, но это не работает вместе с оконной функцией

SELECT 
   user_id,
   event,
   received_at,
   received_at - LAG( received_at,1) OVER (PARTITION BY user_id ORDER BY received_at) AS last_event
FROM 
   segment_javascript.help_center_opened

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вы не можете сделать это «способом Oracle», просто вычитая две даты, чтобы получить число, вы должны использовать функцию сравнения с единицей измерения / шкалой, например:

SELECT 
   ts, 
   TIMESTAMPDIFF(MILLISECONDS, LAG(ts, 1) OVER (ORDER BY ts), ts) tsd
FROM 
   (VALUES (CURRENT_TIMESTAMP), (DATEADD(DAY, 1, CURRENT_TIMESTAMP))) v(ts);
0 голосов
/ 07 октября 2019

Я полагаю, что вам нужно рассчитать разницу во времени для того же user_id с последним временем получения события.

Если так, я думаю, это сработает:

SELECT 
   user_id,
   event,
   received_at,
   DATEDIFF(
     MINUTE, -- or any other supported date/time part
     received_at, -- start time 
     LAG( received_at,1) OVER (PARTITION BY user_id ORDER BY received_at) -- end time
     ) AS last_event
FROM 
   segment_javascript.help_center_opened
...