SYNTAX_ERROR: строка 1: 1: DISTINCT в параметрах оконной функции еще не поддерживается - PullRequest
0 голосов
/ 04 марта 2020

У меня есть таблица ниже:

Blockquote

Я пишу код ниже, чтобы получить следующую метку времени, используя T5, а затем рассчитать продолжительность. Однако для последней записи, где T5 и T6 равны, я хочу заполнить среднее значение предыдущих длительностей. Однако я получаю ошибку при этом. Что я делаю не так?

    SELECT
T1,
T2,
T3,
T4,
T5,
T6,
case 
when T5=T6 then sum(date_diff('second',T5,T6)) over (partition by T1, T2, T3, 
date(T5)) / (count(DISTINCT T6)over (partition by T1, T2, T3, date(T6) )) 
else date_diff('second',T5,T6) end as duration
from
(
 SELECT T1,
T2,
T3,
T4,
T5,
lead(T5, 1, T5) over (partition by T1, T2, T3, date(T5) order by T5) as T6
FROM TABLE_X 
)

1 Ответ

1 голос
/ 04 марта 2020

Вы можете эмулировать count(*) distinct с помощью этой логики c:

(dense_rank() over (partition by T1, T2, T3, date(T6) order by T6 asc) +
 dense_rank() over (partition by T1, T2, T3, date(T6) order by T6 desc) -
 1
)

То есть сумма плотных рангов в порядке возрастания и убывания равна количеству различных значений в разделе.

...