各人の最大 (またはトップ) トランザクションを返すクエリを実行しようとしている 2 つのテーブルがあります。テーブル構造を変更できないことに注意してください。むしろ、データをプルすることしかできません。
人々
+---------+ | | ID | 名前 | +---------+ | | 42 | ボブ | | | 65 | テッド | | | 99 | ストゥ| +---------+
トランザクション (主キーはありません)
+---------------------------------+ | | 人 | 金額 | 日付 | +---------------------------------+ | | 42 | 3 | 2030 年 9 月 14 日 | | | 42 | 4 | 2015 年 7 月 2 日 | | | 42 | *ヌル* | 2020 年 2 月 4 日 | | | 65 | 7 | 2010 年 1 月 3 日 | | | 65 | 7 | 2020 年 5 月 20 日 | +---------------------------------+
最終的には、一人一人に最高額を返したいと思っています。それがうまくいかない場合は、日付を見て最新の日付を返したいと思います。
だから、私は私のクエリが返されるようにしたい:
+----------------------------------------+ | | person_id | 名前 | 金額 | 日付 | +----------------------------------------+ | | 42 | ボブ | 4 | 2015 年 7 月 2 日 | (←最高額) | | 65 | テッド | 7 | 2020 年 5 月 20 日 | (<- 最新の日付) | | 99 | ストゥ| *ヌル* | *ヌル* | (<- Transactions テーブルにレコードがありません) +----------------------------------------+
SELECT People.id, name, amount, date
FROM People
LEFT JOIN (
SELECT TOP 1 person_id
FROM Transactions
WHERE person_id = People.id
ORDER BY amount DESC, date ASC
)
ON People.id = person_id
何が間違っているのかわかりませんが、間違っていることはわかっています。どんな助けでも大歓迎です。