SQL Server最大功能

use*_*043 2 sql-server-2008

我有以下查询:

SELECT
a.name, a.address, n.date, n.note
FROM a
LEFT JOIN n ON a.id = n.id
Run Code Online (Sandbox Code Playgroud)

a.id具有一对多的关系n.id,因此许多注释可以与一个名称相关联.

如何仅返回每个名称的最新注释而不是所有注释?

我正在使用SQL Server 2008.

谢谢.

T I*_*T I 5

这是使用的一种方式 ROW_NUMBER()

SELECT t.name, t.address, t.date, t.note
FROM (
    SELECT
        a.name, a.address, n.date, n.note,
        ROW_NUMBER() OVER (PARTITION BY a.name ORDER BY n.date DESC) rn
    FROM a
    LEFT JOIN n ON a.id = n.id
) t
WHERE t.rn = 1
Run Code Online (Sandbox Code Playgroud)

您也可以使用相关子查询来获取最大日期,就像这样

SELECT
    a.name, a.address, n.date, n.note
FROM a
LEFT JOIN n ON a.id = n.id
WHERE n.date = (SELECT MAX(nn.date) 
                FROM n AS nn 
                WHERE a.id = nn.id)
Run Code Online (Sandbox Code Playgroud)