请耐心等待,因为我是初学者,在其他地方找不到这个答案。我正在处理员工数据,需要确定给定团队在我们系统中处于活动状态的最后一天与哪个产品组相关联。每个员工记录都包括他们所在的产品组、他们的团队以及团队是否仍然活跃。我正在使用的数据表具有由“ds”字段指定的每日分区,可追溯到 8 年以上。
使用以下 SQL,我可以看到团队在给定产品组下的最后日期是什么:
SELECT product_group_name, team_name, max(ds) as last_active_ds
FROM
employee_table ep
WHERE
is_active = TRUE
AND team_name = 'Moon'
GROUP BY 1,2
这将返回:
产品组 | 团队 | 上次活动日期 |
---|---|---|
太空集团 | 月亮 | 2022 年 8 月 19 日 |
水务集团 | 月亮 | 06-15-2022 |
在上面的输出中,您可以看到 Moon 团队曾经坐在 Water Group 之下,但在 2022 年 6 月 15 日之后移至 Space Group。但在这种情况下,我只关心月球团队最后一次活跃于 2022 年 8 月 19 日,当时他们坐在太空组之下。
如何修改上述查询以仅返回“Space Group”作为他们最后一次在被弃用时所在的产品组?我尝试了我认为可以做到的 CTE,但我遇到了几乎相同的问题。感谢任何帮助。
WITH latest_active_ds AS (
SELECT DISTINCT
team_name,
MAX(ds) as latest_active
FROM
employee_table ep
WHERE
is_active = TRUE
AND team_name = 'Moon'
GROUP BY 1
)
SELECT DISTINCT lad.team_name, lad.latest_active, ep.product_group_name
FROM
latest_active_ds lad
LEFT JOIN employee table ep on lad.team_name = ep.team_name AND lad.latest_active = ep.ds
WHERE lad.team_name = 'Moon'
AND lad.latest_active = ep.ds
在我看来,一个简单的 row_number 对您的情况会有所帮助:
注意,我猜日期是正确的日期格式,否则你需要在 order by 子句中使用 str_to_date 函数。如果您只想要团队 Moon 的结果,请
and team='Moon'
在查询末尾添加。