连接中的子查询无法到达子查询外的对象

Subquery in join can't reach object outside of the subquery

以下查询选择学生姓名及其特定行的最高分。问题是left join里面的子查询不能用了。 我收到 Teradata 数据错误:"Object Date_View doesn't exist'"。如何解决?

Select name, max_score_today.max_score From Student_View

Left Join Date_view 
ON Date_View.date=Student_View.date

Left Join (
Select MAX(score) as max_score FROM 
Score_View
Where Date_View.start_date=Score_View.date

) max_score_today
ON max_score_today.name=Student_View.name

将相关子查询向上移动到 select 语句中,例如:

    select name, 
(select max(score) from score_view where date_view.start_date) = score_view.date) as max_score
    from student_view
    left join
    date_view
    on date_view.date = student_view.date;

要获得具有 highest/lowest 值的行,您最好使用 RANKROW_NUMBER,如下所示:

Select *
From Student_View
Left Join Date_view 
  on Date_View.date=Student_View.date 
Left Join Score_View
   on Date_View.start_date=Score_View.date
   and Score_View.name=Student_View.name
QUALIFY -- get the highest score for each student/date
  ROW_NUMBER() -- maybe RANK
  OVER (PARTITION BY Student_View.name, Score_View.date
ORDER BY Score_View.score DESC) = 1

我不确定这是否是正确的结果,您可能需要更改 PARTITION 表达式...