Teradata SQL помогите. Нужна помощь в получении даты начала и окончания (желтый) самого последнего статуса занятости. Спасибо - PullRequest
0 голосов
/ 24 марта 2020

Teradata SQL помощь. Нужна помощь в получении даты начала и окончания (желтый) самого последнего статуса занятости. Спасибо. Нажмите на вопрос для image .

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Есть несколько способов получить ожидаемый результат. На основании ваших данных вы можете применить опцию Teradata NORMALIZE, расширение SQL для объединения перекрывающихся периодов:

SELECT NAME, job_title, status, next(Begin(pd)) AS start_date, End(pd) AS end_date
FROM
 ( -- returns one group for consecutive overlapping rows 
   SELECT NORMALIZE
     name, 
     job_title,
     status,
      -- need to subtract 1 to create a valid period
     PERIOD(prior(start_date), end_date) AS pd
   FROM tab
 ) AS dt
QUALIFY
   -- return the latest row only
   Row_Number()
   Over(PARTITION BY name
        ORDER BY start_date DESC) = 1

Внимание: эта команда возвращает новую группу всякий раз, когда имя, название должности или статус меняются.

0 голосов
/ 24 марта 2020

Попробуйте:

SELECT
  t.name, 
  MAX(t.job_title) AS job_title,
  status,
  MIN(t.start_date) AS start_date, 
  MAX(t.end_date) AS end_date
FROM mytable t
GROUP BY t.name, t.status
QUALIFY RANK() OVER(PARTITION BY t.name ORDER BY t.start_date DESC) = 1

Teradata сначала выполнит агрегаты, а затем применит оконную функцию. Итак, сначала получим MIN/MAX даты в status каждого человека, а затем присваиваем RANK каждой из этих строк на основе самых последних start_date.

У меня нет систему для тестирования, но попробуйте и дайте мне знать.

...