我已经建立了一个查询,以查找Person X最早晋升到特定级别的时间-
"firsttimeEMplus" AS (
SELECT MIN(ra."EffectiveDate")
FROM rankachievement ra
WHERE ra."NewRank" IN ('Executive Manager',
'Associate Director',
'Director',
'Senior Director',
'Executive Director',
'Managing Director'))
现在我想做的是将该查询的结果用作递归查询中CASE语句的一部分,在此我可以确定Person X是否在其父母之前被晋升。因此,子级firsttimeEMplus <父级firsttimeEMplus
SELECT (CASE WHEN (**child**"firsttimeEMplus" <= **parent**"firsttimeEMplus) THEN etc....
但是我对哪种语法允许我将父对象与子对象进行比较,或者是否甚至可以在CASE语句中执行类似操作感到困惑。如果有人可以提供指导或资源,或者在哪里可以找到如何工作的示例,将不胜感激。谢谢!
答案 0 :(得分:0)
这是没有递归的。
这个想法是要获得您所有的first_time_em
人的清单。使用left join
和filter
子句将使所有人回到是否达到EM级别。
将此结果重新加入自身,将每个记录与其父记录连接起来。同样,这是left join
,因为层次结构顶部的人不应该有父母。
case
语句可能只是与boolean
的{{1}}比较,因为我们需要的只是coalesce
/ true
。可能的条件是:
false
在父母的first_time_em
之前,这会产生first_time_em
true
,而老板没有(first_time_em
),后者由null
变成了coalesce()
,产生了9999-12-31
true
(first_time_em
),由null
产生false
else
在父母的first_time_em
之后,由'else`产生first_time_em
false
,first_time_em
会产生false
else