我是SQL新手,我認爲這是一個相對基本的查詢,但似乎無法使其工作。SQL複雜篩選器/聯接問題
我有兩個表。一個有團體成員資格和關於該團體的其他細節。兩者之間的關鍵字段是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
注意,有喬的兩個條目,因爲他改變組。
GroupInformation是這樣的:
Group FullName Location Color
A Panthers New York Blue
B Steelers London Orange
C Archers Moscow Yellow
我想運行一個查詢,在任何一天,都會給我個人的組成員與團隊詳細信息。
所以,我想找到與MAX(EffectiveDate)
行中的成員身份在指定日期運行中每個個體的人,離開加入GroupInformation表上的關鍵Group
如果我跑9/4我想查詢得到這樣的:
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
如果我跑9/13查詢我會得到這樣的:
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
注意兩者之間的區別查詢結果是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標記你的問題。 –