0

3 つのテーブルInvoiceAccountあり、Visits

それぞれに共通の主キーがあります ( AccountID)。7月に訪問がなく、その月に訪問を許可する有効なアカウントを持っていたアカウントのデータを引き出す必要があります(Invoice-scheduletypeAccount-から引き出されますstartdate

いくつかの結合を使用してみましたが、必要なデータを取り出すことができず、SQL も初めてです。誰かが私を助けてくれますか?

4

4 に答える 4

0
select A.*
from Accounts A
where A.AccountID NOT IN
    (Select V.AcocountID
     From Visits V
     Where V.date like '%July%'   //replace by appropriate condition
    ) AND
     A.AccountID IN
    (Select I.AccountID
     From Invoice I
     Where I.type = Invoice        //replace by appropriate condition
    ) AND
    A.startDate< July              //replace by appropriate condition
于 2012-08-28T02:08:34.970 に答える
0

前の回答から借りて、このようにすることもできます (私は EXISTS を使用して、AccountID がそこにあるかどうかを確認することを好みます。存在する場合は、すぐに検索を停止します)。

SELECT A.* FROM Accounts A WHERE A.AccountID NOT IN
    (SELECT V.AccountID
        FROM Visits V
        WHERE CONVERT(date, V.date) BETWEEN '2012-07-01' AND '2012-07-31'
        -- assuming V.date is a 'datetime'. if V.date is already a 'date' then:
        -- WHERE V.date BETWEEN '2012-07-01' AND '2012-07-31'
        -- or you could say
        -- WHERE NOT(DATEPART(month, V.date) = '7' AND DATEPART(year, V.date) = '2012')
    )
    AND EXISTS (SELECT *
        FROM Invoice I
        WHERE I.type = Invoice        //or whatever
    ) AND
    A.startDate < '2012-07-01'        //or whatever
于 2012-08-28T03:01:52.663 に答える
0

訪問日から推測すると、

SELECT  a.AccountID
FROM    Account a
WHERE   NOT EXISTS  (
                    SELECT 1 
                    FROM Invoice i 
                    WHERE i.AccountID = a.AccountID 
                    AND i.ScheduleType = 'hold'
                    AND i.StartDate < '8/1/2012'
                    AND i.EndDate >= '7/1/2012'
                    )
AND     NOT EXISTS  (
                    SELECT 1
                    FROM Visits v
                    WHERE v.AccountID = a.AccountID
                    AND v.SessionDate >= '7/1/2012'
                    AND v.SessionDate < '8/1/2012'                  
                    )
AND     a.StartDate < '8/1/2012'
AND     a.EndDate >= '7/1/2012'
GO
于 2012-08-28T03:15:59.773 に答える
0

以下のクエリを使用します。

Select A.*
From Accounts A
left join visits v on v.AccountID = A.AccountID 
                  AND v.SessionDate >= '2012-07-01'
                  AND v.SessionDate < '2012-08-01'
left join Invoice I ON I.AccountID = A.AccountID
                   AND I.ScheduleType = 'hold'
Where V.AccountID IS NULL
   and I.AccountID IS NULL
   and A.startDate < '2012-07-01' 
于 2012-08-28T03:51:29.237 に答える