SQL 特定のカラムが最大値のレコード取得

masaki
2014-04-08 11:26 1810 2
初心者です。SQL文で困っています。
どなたかご教授頂けたらと思います。

環境は、SQL SERVER 2000です。
特定のカラムが最大値のレコードのみ取得したいです。
たとえば、以下のようなデータがあるとします。
コード、履歴番号で主キーとします。
コード|履歴番号 |金額
0001 |1 |12000
0001 |2 |12001
0001 |3 |12002
0002 |1 |12000
0002 |2 |12001
0002 |3 |12002
0003 |1 |12000
0003 |2 |12001
この場合に、コード毎に履歴番号が最大のレコードのみを取得したいです。
理想の結果は以下になります。
コード|履歴番号 |金額
0001 |3 |12002
0002 |3 |12002
0003 |2 |12001

以上です。よろしくお願いいたします。

コメント

2014年 04月 10日 (12:26)
こんにちは。
イノ(inno)です。

下記にテストクエリを作成してみました。

-- ### テストテーブル作成
CREATE TABLE dbo.TempData
(
data1 varchar(50)
, data2 varchar(50)
, data3 varchar(50)
)

-- ### テストデータ登録
INSERT INTO dbo.TempData
SELECT '0001','1','12000' UNION ALL
SELECT '0001','2','12001' UNION ALL
SELECT '0001','3','12002' UNION ALL
SELECT '0002','1','12000' UNION ALL
SELECT '0002','2','12001' UNION ALL
SELECT '0002','3','12002' UNION ALL
SELECT '0003','1','12000' UNION ALL
SELECT '0003','2','12001'

-- ### 実行!
SELECT B.*
FROM
(
SELECT data1, MAX(data2) AS data2
FROM dbo.TempData
GROUP BY data1
) A
JOIN dbo.TempData B
ON A.data1 = B.data1 AND A.data2 = B.data2
ORDER BY A.data1


-- ### 実行結果
data1 data2 data3
0001 3 12002
0002 3 12002
0003 2 12001

いかがでしょうか。
masaki 2014年 04月 10日 (15:58)
あぁ!group byを使えばできるんですね。
なるほど!
ありがとうございました。