Sql server 加入骨料

Sql server 加入骨料,sql-server,join,Sql Server,Join,我在面试中遇到了这样一个问题。输出将包含每个ID的最高年龄和最高标记。使用带分区的行编号(如下所示)获取输出 ;WITH T AS ( SELECT ID, Age, Marks, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Age DESC,MArks DESC) AS PartNo FROM @tbl1 ) SELECT T.ID, T2.Name,

我在面试中遇到了这样一个问题。输出将包含每个ID的最高年龄和最高标记。

使用带分区的行编号(如下所示)获取输出

;WITH T AS
(
    SELECT
        ID,
        Age,
        Marks,
        ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Age DESC,MArks DESC) AS PartNo
    FROM @tbl1
)
SELECT
    T.ID,
    T2.Name,
    T.Age,
    T.Marks
FROM T
LEFT JOIN @tbl2 T2 ON T.ID=T2.ID
WHERE PartNo=1

使用此查询,您将得到您的结果

如果数据像230200和228300,结果应该是什么?
SELECT A.ID,A.Name,MA.MaxAge Age,MM.MaxMarks Marks FROM tbl2 A
LEFT JOIN (SELECT Id, Max(Age)MaxAge FROM tbl1 GROUP BY ID) MA ON MA.ID = a.ID
LEFT JOIN (SELECT Id, Max(Marks)MaxMarks FROM tbl1 GROUP BY ID) MM ON MM.ID = a.ID