2015-02-08 3 views
0

Я смущен, почему мы используем это мин function.I я не в состоянии понять, как ниже фрагмент кода works.Please руководствоВ чем разница между предыдущим и последующим в Teradata запросе

COALESCE(min((start_Date)) OVER (partition by Seq_id ORDER BY start_Date rows between 1 following and 1 following),cast('9999-12-31 00:00:00' as timestamp(6)) end_Date FROM table.test1 
+0

Teradata не Oracle. –

ответ

2

Это ваш запрос:

SELECT COALESCE(min((start_Date)) OVER (partition by Seq_id 
             ORDER BY start_Date 
             rows between 1 following and 1 following 
            ), 
     cast('9999-12-31 00:00:00' as timestamp(6)) 
     ) as end_Date 
FROM table.test1 

Этот запрос выполняется;

SELECT COALESCE(LEAD(Start_Date) OVER (PARTITION BY seq_id ORDER BY start_date), 
       cast('9999-12-31 00:00:00' as timestamp(6)) 
       ) as end_Date 

То есть, это извлечение значения даты из «следующей» строки, как это определенно Start_Date.

Я думаю, что эта конструкция используется, потому что (некоторые версии) Teradata не поддерживают LEAD().

+0

Не могли бы вы пояснить, почему мы используем функцию min внутри функции coalesce. Что означает 1 следующий и 1 следующий? –

+0

@RajeswariRanganathan. , , Это оконная/аналитическая функция. Вы должны посмотреть документацию, чтобы узнать, как она будет использоваться. Если вы используете 'предыдущий', у вас есть эквивалент' lag() '. –

0

Вы найдете хорошее объяснение с оконной функцией Teradata, Ряды между предшествующим и Предшествующим: http://pauldhip.blogspot.dk/2015/04/window-function-rows-between-preceding.html

+0

Ссылки блога имеют тенденцию умереть и оставлять ответы бесполезными - не могли бы вы включить соответствующие части в свой ответ? –

+0

Привет, Бен, сообщение в блоге точно объясняет заголовок этого сообщения, и у него есть хорошее объяснение, чтобы легко понять. Но кому-то нужно прочитать два сообщения, чтобы понять их. Пожалуйста, спросите меня, если вы еще не поняли это. – Paul

Смежные вопросы