次のクエリがあります。
SELECT
a.name, a.address, n.date, n.note
FROM a
LEFT JOIN n ON a.id = n.id
はと 1 対多a.id
の関係にn.id
あるため、多くのメモを 1 つの名前に関連付けることができます。
すべてのメモではなく、名前ごとに最新のメモを返すにはどうすればよいですか?
SQL Server 2008 を使用しています。
ありがとう。
次のクエリがあります。
SELECT
a.name, a.address, n.date, n.note
FROM a
LEFT JOIN n ON a.id = n.id
はと 1 対多a.id
の関係にn.id
あるため、多くのメモを 1 つの名前に関連付けることができます。
すべてのメモではなく、名前ごとに最新のメモを返すにはどうすればよいですか?
SQL Server 2008 を使用しています。
ありがとう。
ここに使用する1つの方法があります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
別の方法として、相関サブクエリを使用して最大日付を取得することもできます。
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)