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

ねこもち
2013-11-15 12:09 2049 1
初心者です。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

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

コメント

2013年 11月 18日 (10:52)
こんにちは。
イノ(inno)です。

下記のように実行してみてください。

-- #### 一時テーブル作成
CREATE TABLE dbo.TempData
(
Code char(4)
, LogSn int
, Amount money
)
GO

-- #### テストデータ登録
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
GO


-- #### 結果出力 : MS-SQL SERVER 2000以上の場合、
SELECT A.Code, B.LogSn, A.Amount
FROM
(
SELECT Code, MAX(Amount) Amount
FROM dbo.TempData
GROUP BY Code
) A JOIN dbo.TempData B
ON A.Code = B.Code AND A.Amount = B.Amount
ORDER BY A.Code

-- #### 結果出力 : MS-SQL SERVER 2005以上の場合、
SELECT Code, LogSn, Amount
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Amount DESC) AS Idx
FROM dbo.TempData
) A
WHERE Idx = 1
ORDER BY Code