.1 はじめに
- SQL Serverで重複行の削除をDISTINCT, GROUP BYを使用せず、副問い合わせで対応したい
- SQLの自己結合を使用して重複行を削除したい
2. 開発環境
- SQL Server 2022
3. テストデータ
- Sales (売上)
ProductID | SaleDate | Amount |
---|---|---|
100 | 2025/01/01 | 100 |
100 | 2025/01/02 | 200 |
100 | 2025/01/03 | 300 |
200 | 2025/02/01 | 500 |
200 | 2025/02/02 | 600 |
4. SQLサンプル
- SaleDate(売上日)が最新の行のみ取得して、重複行を削除する
SELECT
Sales1.*
FROM
Sales Sales1
LEFT JOIN Sales Sales2
ON Sales2.ProductID = Sales1.ProductID
AND Sales2.SaleDate = (
SELECT
TOP 1 SaleDate
FROM
Sales
WHERE
ProductID = Sales1.ProductID
ORDER BY
SaleDate DESC
)
- 処理結果
ProductID | SaleDate | Amount |
---|---|---|
100 | 2025/01/03 | 300 |
200 | 2025/02/02 | 600 |
5. 参考文献