0

/* メンバーシップが期限切れの日付でメンバーを表示します */

select m.FirstName, m.LastName, m.SocialSecurityNumber, m.Mobile, m.Email 
from Members as m
Join Memberships as ms on ms.MemberId = m.Id
where ms.ToDate < '2012-10-31'

メンバーは複数のメンバーシップを持つことができますが、有効なメンバーシップは 1 つだけです。ユーザーが 4 つのメンバーシップを持っていて、3 つの有効期限が切れている場合、このステートメントは多くのユーザーに与えられ、3 回表示されます。メンバーが有効なメンバーシップを持っていない場合にのみ、メンバーが含まれるようにします。

私がここでやろうとしていることを理解していただければ幸いです。

4

2 に答える 2

0

最も簡単な方法は、現在のサブスクリプションの値Membersのリストに含まれていないテーブル内のすべての人のリストを取得することです。結合は必要ないため、重複はありません。MemberIDMemberships

SELECT m.FirstName, m.LastName, m.SocialSecurityNumber, m.Mobile, m.Email 
FROM Members AS m
WHERE m.ID NOT IN ( 
    SELECT ms.MemberID 
    FROM Memberships ms 
    WHERE ms.ToDate >= '2012-10-31')
于 2012-10-31T20:47:28.327 に答える
0

最後のメンバーシップ ToDate を取得する必要がある場合、最善の方法は次のようにすることです。

select 
    m.FirstName, m.LastName,
    m.SocialSecurityNumber, m.Mobile, m.Email,
    ms.ToDate
from Members as m
    left outer join (
        select t.memberId, max(t.ToDate) as ToDate
        from Memberships as t 
        group by t.MemberId
    ) as ms on ms.MemberId = m.Id
where ms.ToDate < '2012-10-31' or ms.ToDate is null
于 2012-10-31T20:50:23.487 に答える