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 或状态发生变化时都会创建一个新组。
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 或状态发生变化时都会创建一个新组。