Функция Lead Lag не работает на Teradata 15.0. Любой альтернативный метод, который мог бы дать мне аналогичные результаты

МОЯ ТАБЛИЦА ТАБЛИЦА БАЗЫ ДАННЫХ

Я пытаюсь найти разницу между следующей датой поступления и предыдущей датой выхода на уровне EMPL. Примерно так ВЫХОДНЫЕ РЕЗУЛЬТАТЫ

Код задержки, который я пробовал использовать,

ВЫБЕРИТЕ CUSTID_DIV, CUSTID_MASTER, CUSTID_KEY, TENURE_DAYS, LAG (TENURE_DAYS, '1', '0') OVER (PARTITION BY CUSTID_MASTER ORDER BY CUSTID_MASTER) AS TEST FROM BSYBI_SLSOPSAN.CUSTOMER_SLSOPSAN.CUSTOMER_

ОШИБКА: DATA TENURE TENURE DAYS не соответствует определенному типу данных.


person Sanket Gandhi    schedule 24.07.2020    source источник
comment
Можете ли вы предоставить фрагмент кода LEAD / LAG, а также какие-либо сообщения об ошибках?   -  person bbaird    schedule 24.07.2020
comment
Мой помощник teradata sql - старая версия, поэтому не поддерживает функции lad и lead SELECT CUSTID_DIV, CUSTID_MASTER, CUSTID_KEY, TENURE_DAYS, LAG (TENURE_DAYS, '1', '0') OVER (PARTITION BY CUSTID_MASTER ORDER BY CUSTID_MASTER) ASV Ошибка: количество дней владения типом данных не соответствует определенному типу данных.   -  person Sanket Gandhi    schedule 24.07.2020


Ответы (1)


IIRC (возможно, нет), LEAD / LAG не были полностью реализованы до 16. Итак, попробуйте:

MAX(COALESCE(TENURE_DAYS,0)) OVER ( PARTITION BY CUSTID_MASTER ORDER BY CUSTID_MASTER ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)

Шаблон: MAX(<column>) OVER (PARTITION BY <column(s)> ORDER BY <column(s)> ROWS BETWEEN 1 <PRECEDING (Lag)/FOLLOWING (Lead)> AND 1 <PRECEDING (Lag)/FOLLOWING (Lead)>)

person bbaird    schedule 24.07.2020
comment
Спасибо за быстрые входы здесь ВЫБРАТЬ CUSTID_DIV, CUSTID_MASTER, CUSTID_KEY, TENURE_DAYS, MAX (CAST (Coalesce (TENURE_DAYS, 0), как VARCHAR)) OVER (PARTITION BY CUSTID_MASTER ORDER BY CUSTID_MASTER РЯДОВ МЕЖДУ 1 предшествует и 1 ПРЕДЫДУЩИЙ) ИЗ BSYBI_SLSOPS.CUSTOMER_ANALYTICS_V ОШИБКА: ожидалось что-то вроде '(' между ключевым словом 'VARCHAR' и ')' - person Sanket Gandhi; 24.07.2020
comment
Вам нужно будет указать ширину VARCHAR - person bbaird; 24.07.2020
comment
@SanketGandhi. Я понятия не имею, почему я бросил туда CAST (это было из более ранней редакции?) - что это за тип данных Tenure_Days и каким вы хотите, чтобы он был? - person bbaird; 24.07.2020
comment
Я хотел бы использовать дату, вероятно, чтобы сделать запрос более эффективным. могу я использовать дату? или это были бы дни. [Срок действия - десятичный тип данных] - person Sanket Gandhi; 24.07.2020
comment
MAX (COALESCE (CAST (NEXT_LC_DATE AS VARCHAR (10)), 'Date is NULL')) OVER (РАЗДЕЛЕНИЕ ПО CUSTID_MASTER ORDER BY CREATED_DATETIME СТРОКИ МЕЖДУ 1 ПРЕДЫДУЩИМ И 1 ПРЕДЫДУЩИМ) Это сработало ... Большое спасибо за помощь. :) - person Sanket Gandhi; 24.07.2020
comment
COALESCE должен быть за пределами MAX: COALESCE(CAST( MAX(NEXT_LC_DATE) OVER ( PARTITION BY CUSTID_MASTER ORDER BY CREATED_DATETIME ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS VARCHAR(10)),'Date is NULL'), но почему вы все равно используете CAST, каковы дополнительные преимущества по сравнению с простым NULL? - person dnoeth; 24.07.2020