まず、セットアップを説明しましょう。私たちは、私たちが見ているSQL Server 2012の上に2つのテーブルを持って次のようにすべてのアカウントのゲストの最小日
PL_Guest and PL_MergedGuests
PL_Guest構造は次のとおりです。次のように
Create Table PL_Guest(
GuestID [int] IDENTITY(1,1) NOT NULL Primary Key,
CreatedDate [date] NOT NULL)
PL_MergedGuests構造は次のとおりです。
Create Table PL_MergedGuests(
MergeID [int] IDENTITY(1,1) NOT NULL Primary Key,
VictimID [int] NOT NULL,
SurvivorID [int] NOT NULL)
だから、状況がされthis:
PL_Guestテーブルは、これまでに作成したすべてのゲストのレコードを保持していますrにはレコードが削除されています。 PL_MergedGuestsテーブルには、2つのアカウントをマージするときのvictimidとsurvivoridのリストが格納されています。たとえば、ある人が何らかの理由で複数のGuestidを割り当てられている場合、これを実行します。現在、マージが行われると、フロントラインの従業員は、その人が保持する複数のアカウントのうちのどれを選択するかは、通常、ゲストが手に入れているカードに基づいて行われ、ゲストの変更は少なくなります。ゲストがCreatedDate 1/1/2013でGuestID 5を、GuestID 10にCreatedDate 10/20/1を持つゲストがあった場合、 GuestID 5がGuestID 10にマージされ、次にGuestID 5がVictimになり、GuestID 10が生存者になるようにマージが行われました。レポートを実行すると、生存者のアカウントだけが表示されます。しかし、我々は各ゲストのために最も古いCreated Dateを見つけるよう求められています。したがって、上記の例では、GuestID 10を返すエントリが必要です。GuestID 10のゲストとして作成された日付1/1/2013には、2013年1月1日の古い作成日のGuestID 5もあります。
本当に難しい部分については、ゲストがマージされた可能性のある回数に制限はなく、これらのテーブルにはそれぞれ1億レコード以上が保持されます。私はこれが何らかのループを必要とすると思っていた(これは再帰的なコーディングと呼ばれるかもしれないが、私はそれは不確かだと思う)が、そのコードを書く方法は失われている。それが助けになるが現在のテーブルを変更することができない場合は、私は新しいテーブルを作成するためのアクセス権を持っています。
あなたが言った:「我々は、レポートを実行すると、我々は唯一の生存者のアカウントを見て"あなたは生き残ったゲストを今どのように知っていますか? 'PL_Guest'テーブルにフラグがありますか?はいの場合は、それに応じて質問を編集してください。 –
生存者アカウントは、VictimIDがnullのGuestID = VictimIDのPL_MergedGuestへのPL_Guestの左結合を実行すると見つかります。 –