Teradata SQL 帮助。需要帮助获取最近就业状态的开始日期和结束日期(黄色)。谢谢

Teradata SQL help. Need help getting the start date and end date (yellow) of the most recent employment status. Thank you

Teradata SQL 帮助。需要帮助获取最近就业状态的开始日期和结束日期(黄色)。谢谢你。单击 image 的问题。

试一试:

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 将首先进行聚合,然后应用 window 函数。因此,这将首先获取每个人 status 中的 MIN/MAX 日期,然后根据最近的 start_date.[=15= 为这些行中的每一行分配一个 RANK ]

我没有要测试的系统,但试试看并告诉我。

有多种方法可以获得您的预期结果,根据您的数据,您可以应用 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

注意:这个 returns 每当名称、job_title 或状态发生变化时都会创建一个新组。