2012-07-25 118 views
1

这里是我的表如下记录(GROUP BY): (我目前使用SQL Server 2008)SQL:从其他表的每一行获取最后一个(最大)记录

YearLevels

YearLevelID  YearLevelName 
1    Freshman  
2    Sophomore  
3    Junior  
4    Senior 

学生

StudentID  FirstName  LastName 
1    John   Doe 
2    Peter   Pan 
3    Mark   Twain 

水平sAttained

SSID  StudentID YearLevelID 
1  1   2 
2  1   1 
3  1   3 
4  2   2 
5  3   1 
6  2   1 

输出应该是:

FullName  YearLevelName 
John Doe  Junior 
Peter Pan Sophomore 
Mark Twain Freshman 
+3

什么DBSM(f.e。 SQL-Server,MySql,Oracle)? – 2012-07-25 14:36:49

回答

5
SELECT FirstName + ' ' + LastName AS FullName, YearLevelName 
FROM Students S 
INNER JOIN (
    SELECT StudentID, MAX(YearLevelID) AS MaxLevel 
    FROM LevelsAttained 
    GROUP BY StudentID 
) MaxLevels ON MaxLevels.StudentID = S.StudentID 
INNER JOIN YearLevels Y ON Y.YearLevelID = MaxLevels.MaxLevel 
+4

注意(对于@eibhrum)Strings的'+'是非标准语法,只能在SQL Server上运行。标准SQL使用'||'代替。 – 2012-07-25 14:36:25

+0

@LittleBobbyTables:我收到'MaxLevel'附近的语法不正确。 – abramlimpin 2012-07-25 14:56:21

+1

@eibhrum - 对不起,忘记MaxLevels上的连接子句,现在应该工作 – LittleBobbyTables 2012-07-25 15:02:56

1

试试这个:

SELECT FirstName || ' ' || LastName AS FullName, l.YearLevelName AS YearLevelName 
FROM Students s 
JOIN (SELECT StudentID, MAX(YearLevelID) AS LevelID FROM LevelsAttained GROUP BY StudentID) g0 
ON g0.StudentID = s.StudentID 
JOIN YearLevels ON g0.LevelID = l.YearLevelID 
1

你可以使用一个公共表表达式与ROW_NUMBER窗函数:

WITH CTE AS(
    SELECT RN = 
     ROW_NUMBER()OVER(PARTITION BY la.StudentID ORDER BY la.YearLevelID DESC) 
    , FirstName + ' ' + LastName AS FullName 
    , YearLevelName 
    FROM Students s 
    INNER JOIN LevelsAttained la ON s.StudentID = la.StudentID 
    INNER JOIN YearLevels yl ON la.YearLevelID = yl.YearLevelID 
) 
SELECT FullName, YearLevelName FROM CTE WHERE RN = 1 
1
select s.firstname + ' ' + s.lastname, y.yearlevelname from 
students s 
inner join (select max(yearlevelid) yearlevelid, studentid from levelsattained group by studentid) l on s.studentid = l.studentid 
inner join YearLevels y on l.yearlevelid = y.yearlevelid 
相关问题