3 つのテーブルInvoice
がAccount
あり、Visits
それぞれに共通の主キーがあります ( AccountID
)。7月に訪問がなく、その月に訪問を許可する有効なアカウントを持っていたアカウントのデータを引き出す必要があります(Invoice
-scheduletype
とAccount
-から引き出されますstartdate
)
いくつかの結合を使用してみましたが、必要なデータを取り出すことができず、SQL も初めてです。誰かが私を助けてくれますか?
3 つのテーブルInvoice
がAccount
あり、Visits
それぞれに共通の主キーがあります ( AccountID
)。7月に訪問がなく、その月に訪問を許可する有効なアカウントを持っていたアカウントのデータを引き出す必要があります(Invoice
-scheduletype
とAccount
-から引き出されますstartdate
)
いくつかの結合を使用してみましたが、必要なデータを取り出すことができず、SQL も初めてです。誰かが私を助けてくれますか?
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
前の回答から借りて、このようにすることもできます (私は 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
訪問日から推測すると、
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
以下のクエリを使用します。
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'