SQL Q&A

 

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

初心者です。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-08 11:26:05   1514

コメント

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を使えばできるんですね。
なるほど!
ありがとうございました。

SQL Server2005 復元の時、エラーが検出されました  (2)

-.日付:2014-04-21   カテゴリ : -   閲覧数:1703

nvarcharとdatetimeで作成された日付の抽出方法について  (1)

-.日付:2014-04-16   カテゴリ : -   閲覧数:1386

日時範囲でグループ化された最大値の取得について質問~  (1)

-.日付:2014-04-14   カテゴリ : -   閲覧数:1358

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

-.日付:2014-04-08   カテゴリ : -   閲覧数:1514

SQL文「DISTINCT」の「ORDER BY」について  (2)

-.日付:2014-04-07   カテゴリ : -   閲覧数:1392

SQLサーバーでテキスト編集するときの「改行」コード挿入  (2)

-.日付:2014-04-04   カテゴリ : -   閲覧数:1646

SQLServerで文字列の末尾からある位置で取出するには?  (8)

-.日付:2014-04-04   カテゴリ : -   閲覧数:2185

文字列のあるキーワードから開始する部分の抽出  (2)

-.日付:2014-04-03   カテゴリ : -   閲覧数:1333

SQL Serverのバックアップについて  (2)

-.日付:2014-04-02   カテゴリ : -   閲覧数:1356

Copyright © 2015 INNOYA.COM All rights reserved. RSS