2016-03-09 160 views
0

下面的查询选择一个学生的名字和他们的特定行最高分之外不能达到目的。问题是左连接中的子查询无法使用。 我得到Teradata数据错误:“对象Date_View不存在'”。这怎么解决?子查询中加入子查询

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 

回答

1

向上移动的相关子查询到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; 
0

要获得最高/最低值的行你更好地使用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 

我不知道这是否正确的结果,您可能需要更改分区的表达...