2016-11-17 11 views
-2

私は大きなデータセットを持っています。2番目のレコードのみを選択してください。

Name | Age | Hire_Date | Manager 
--------------------------------------- 
Bob | 24 | 01/01/2016 | Mark 
Sue | 31 | 01/01/2014 | Fred 
Mark | 37 | 01/01/2011 | Dawn <---- 
Mark | 37 | 01/01/2011 | Cindy <---- 
Jean | 29 | 01/01/2015 | Larry 
Arron | 47 | 01/01/2004 | Todd 

私は隔離するために必要なものを表示するには3番目と4番目の行の横の矢印を入れている。しかし、簡単にするために、私はこのようなデータセットを持っているとしましょう。 MarkのマネージャーがDawnからCindyにどのように変更されたかに注意してください。私はこのデータセットを選択したいが、マークに対応する2つのレコードのうちの1つだけを選択したい。私はマネージャーがシンディーである第二を選択したいと思います。

私のデータセットはかなり大きく、このシナリオは数回起こります。上記のような2つのレコードがあり、2番目のレコードのみを選択する必要があります。 Oracleでこれを行うための方法はありますか?例の状況では2つのレコードのうちの2番目のレコードのみを選択し、残りの通常レコードを含めますか?

+2

行3を「最初」のレコードにし、行4を「2番目」のレコードにするのはなぜですか?他の列には、それらを区別するためのものはありません。あなたのデータに何か他のものがありますか?または、それはランダムな選択ですか、2つのいずれかを選ぶのですか? (そして、いいえ、マークのマネージャーがDawnからCindyに変わったことに気づくことはできません - あなたが示すデータに基づいてCindyからDawnに変わったこともあります) – mathguy

+0

@mathguy、2つのレコードは正確に最初のレコードでマネージャ名がDawnで、2番目のレコードでマネージャ名がCindyであることを除いて同じです。マネージャー名はそれらを区別します。それはランダムな選択ではありません。 2番目のレコードは最新のものなので、最初はそれを取ります。言い換えれば、シンディー良い、ドーン悪い。かなりストレートです。 – Zolt

+1

ヒープ構成表の行は、本質的に順序付けられていません。 ORDER BY句のない「最初の」行や「2番目の」行はありません。しかし、Cindy行がDawn行の後ろにあると言う結果を出すために使用できるものは何もないようです。そうであれば、その質問は一般的に答えることができません。 –

答えて

0

追加情報がありますと仮定:

select d.Name, d.Age, d.Hire_Date, max(ManagerId) 
from mydata d 
group by d.Name, d.Age, d.Hire_Date 

具体的には、あなたはおそらく、あなたは、単に最大を使用し、その従業員がそのマネージャーに割り当てられたときを示す日付フィールドを持つテーブルに参加したいと思います割り当て日の

いずれにしても、より多くの情報が必要です。

編集: あなたは確かに追加情報が必要です。少なくとも、マネージャが従業員のマネージャになった日時を示す日付フィールドが必要です。 Markの2行の場合、マネージャ有効日付フィールドはDawnの場合よりも後でCindyになります。

+0

この回答は基本的にマネージャ名フィールドを削除しています。これで問題は解決しますが、マネージャー名フィールドを保持する必要があります。 – Zolt

+0

@Zolt - 「もっと情報が必要です」と言った部分が欠けていましたか? (JK)、しかし、より多くの情報が必要です。マネージャーテーブルをリンクする必要があります.IDの最大値を取った後で名前を得ることができます。また、mathguyのコメントを考慮する必要があります。また、group by節を使用して、いくつかのdatetimeフィールドに基づいてmaxを得るためにサブquerryを実行することもできます。 – Joe

+0

@Zolt - これで何が起こっているのか知りたいですか? – Joe

0
select * from table A , table B 
where A.name = B.name -- add extra conditions to match if you need 
and A.rowid >= B.rowid 

これはうまくいきます。しかし、なぜそれが必要なのかを知る必要があります。私は何かが何度もあなたがそれを必要とするかどうかを知る必要があります。

+0

どこからテーブルbを手に入れましたか?テーブルが1つしかありません – Zolt

+1

後で挿入された行がより大きな 'rowid'を持つと仮定すると、むしろ問題のある仮定です。後の行はより大きい 'rowid'を持つかもしれません、より小さい' rowid'を持つかもしれません。 –

+0

Zoltは、どちらも同じテーブルです。試して教えてください。 –

関連する問題