比较递归查询中先前查询的结果

时间:2020-07-14 20:26:45

标签: postgresql case recursive-query

我已经建立了一个查询,以查找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语句中执行类似操作感到困惑。如果有人可以提供指导或资源,或者在哪里可以找到如何工作的示例,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

这是没有递归的。

这个想法是要获得您所有的first_time_em人的清单。使用left joinfilter子句将使所有人回到是否达到EM级别。

将此结果重新加入自身,将每个记录与其父记录连接起来。同样,这是left join,因为层次结构顶部的人不应该有父母。

case语句可能只是与boolean的{​​{1}}比较,因为我们需要的只是coalesce / true。可能的条件是:

  1. 孩子的false在父母的first_time_em之前,这会产生first_time_em
  2. 孩子有一个true,而老板没有(first_time_em),后者由null变成了coalesce(),产生了9999-12-31
  3. 孩子没有truefirst_time_em),由null产生false
  4. 孩子的else在父母的first_time_em之后,由'else`产生first_time_em
  5. 孩子和父母都没有falsefirst_time_em会产生false
else