私はSQLの初心者ですが、これは比較的基本的なクエリだと思いますが、動作させることができません。SQLコンプレックスフィルタ/結合問題
私は2つのテーブルを持っています。 1つは、グループのメンバーシップとそのグループのその他の詳細があります。両者のキーフィールドはGroup
です。
メンバーシップは次のようになります。
Person EffectiveDate Group
Mary 8/10/2017 A
Joe 8/05/2017 A
Peter 9/01/2017 B
Mike 9/2/2017 B
Alice 9/2/2017 B
Joe 9/10/2017 B
Pam 9/3/2017 C
彼がグループを変更したため、ジョーのための2つのエントリがあることに注意してください。
グループ情報は、次のようになります。
Group FullName Location Color
A Panthers New York Blue
B Steelers London Orange
C Archers Moscow Yellow
私は任意の日に、チームの詳細と一緒に私の個々のグループメンバーシップを与える、クエリを実行したいです。だから、
、私は日付の実行時に、個々の人のために会員にMAX(EffectiveDate)
の行を見つけたいと私は9/4にクエリを実行した場合は、私と思いキーGroup
にグループ情報テーブルを結合する左
Person EffectiveDate Group FullName Location Color
Mary 8/10/2017 A Panthers New York Blue
Peter 9/01/2017 B Steelers London Orange
Mike 9/2/2017 B Steelers London Orange
Alice 9/2/2017 B Steelers London Orange
Joe 9/10/2017 B Steelers London Orange
Pam 9/3/2017 C Archers Moscow Yellow
注2の違いその:私は9/13にクエリを実行した場合、私はこの取得したい
Person EffectiveDate Group FullName Location Color
Mary 8/10/2017 A Panthers New York Blue
Joe 8/05/2017 A Panthers New York Blue
Peter 9/01/2017 B Steelers London Orange
Mike 9/2/2017 B Steelers London Orange
Alice 9/2/2017 B Steelers London Orange
Pam 9/3/2017 C Archers Moscow Yellow
:これを取得クエリ結果はJoeです。 9月4日のランではグループAで8/5に参加し、9/13のランではグループBで9/10に参加した。
マイクエリコードは以下の通りである:私はこのコードを実行すると
Select s.Person,
s.Group,
s.EffectiveDate,
g.FullName,
g.Location,
g.Color
From Membership s
Join GroupInformation g
on s.Group = g.Group
and s.EffectiveDate = (
Select Max(s1.EffectiveDate)
From Membership s1
where s1.Group = g.Group
and s1.EffectiveDate <= '2017-09-14')
は、しかし、私はそれがレコードを省略し、私の実際のデータで見つけます。したがって、150のレコードがメンバーシップにある場合、結果の照会結合およびサブクエリ操作は、おそらく80レコードの回答になります。
私が間違っていることを理解できません。ガイダンスをお願いします。
ありがとうございました。
あなたのクエリは、最新の正確*メンバーシップの日付を*しているメンバーのみにレコードを制限していますメンバー。そのため、レコードが省略されています。 –
使用しているdatbseで質問にタグを付けてください。 –