プロが教える店舗&オフィスのセキュリティ対策術

初心者でいまいちSQLが記述できませんでした。
どなたか教えてください。

以下のようなファイルから最新日付のデータを
取得したいのですが、どのようにSQLを記述したら
よいかわかりません。

個人番号|日付|名前|生年月日
00000001,2001/1/1,テスト太郎/1960/1/1
00000001,2003/1/1,テスト太郎/1960/1/1
00000001,2004/1/1,テスト太郎/1960/1/1
00000002,2002/1/1,テスト花子/1945/1/1
00000002,2003/1/1,テスト花子/1945/1/1
00000002,2005/1/1,ですと花子/1945/1/1
00000003,2001/1/1,テスト次郎/1980/1/1
00000003,2003/1/1,テスト次郎/1980/1/1
00000003,2005/1/1,テスト次郎/1980/1/1
↓抽出後
00000001,2004/1/1,テスト太郎/1960/1/1
00000002,2005/1/1,ですと花子/1945/1/1
00000003,2005/1/1,テスト次郎/1980/1/1

よろしくお願いいたします。

A 回答 (2件)

8i workgroup だと、分析関数が使えません。

9i以降は、standard(旧workgroup)でも使えますが。以下、代替え法です。

・個人番号毎に日付が単一(同一日なし)なのであれば、
select 個人番号,日付,名前,生年月日
from TARGET
where
(個人番号,日付) in (select 個人番号,max(日付) from TARGET group by 個人番号)
;
    • good
    • 2
この回答へのお礼

回答ありがとうございます!

データは個人番号と日付がキー項目なので、
同一日はありません。
ご回答いただいた方法で無事できました。

本当にありがとうございました。

お礼日時:2005/03/18 10:04

オラクルのバージョンによって、最適なSQLが変わってくるので、


バージョンとエディションは書いておく方が良いと思いますよ。

分析関数による解決法

select 個人番号,日付,名前,生年月日
from
(
select
TARGET.*,
row_number() over(partition by 個人番号 order by 日付 desc) R
from TARGET
)
where R=1

分析関数を使わない方法もありますが、面倒なので割愛。

この回答への補足

回答ありがとうございます。
初めて質問させていただきましたので、
バージョン等の記述が抜けてしまいました。
失礼いたしました。

バージョンはoracle8iです。
すみません、初心者でエディションとはどこで
確認したらよいのか良く分かりません。
Oracle8iWorkgroupServer
R8.1.7 for WindowsNT/2000
と書いてありました。

早速試してみたのですが、
ORA-00439: 機能は使用できません:
OLAP Window Functions
とエラーとなってしまいました。
バージョンの問題でしょうか?

本当にOracle初心者でよくわからず、すみません。
よろしくお願いいたします。

補足日時:2005/03/18 08:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す