我試圖在我的數據庫中獲得符合某些條件的6個月實體趨勢,但問題是我需要嵌套幾個級別來確定實體是否合格。嵌套查詢時對結果進行分組
實體是可能有多個「帳戶」的「成員」,我需要確保他們的帳戶在包含它們之前都沒有設置某些標誌。
如果我想只是得到一個數作爲一個特定日期的(我們保持歷史數據),我會做這樣的事情:
SELECT COUNT(sup.SSN)
FROM MemberSuppTable as sup
WHERE (
sup.ProcessDate = @PROCESSDATE
AND sup.MemberSuppID IN (
SELECT summ.MemberSuppID
FROM MemberSummaryTable as summ
WHERE (
summ.ProcessDate = @PROCESSDATE
AND summ.AccountNumber IN (
SELECT acct.AccountNumber
FROM AccountTable as acct
WHERE (
acct.ProcessDate = @PROCESSDATE
--other criteria for account exclusion go here.
)
)
)
)
)
MemberSuppTable
對成員高級別信息:
(ID, FirstAccountOpenDate, status, etc)
MemberSummaryTable
關係到賬戶中的成員MemberSuppTable
:
(AccountNumber, MemberSuppID, ...)
現在,我試圖獲得月末處理日期的計數,按單個查詢中的處理日期分組。
所以,在上面的查詢將返回
ssn count
----------
1,000,000
我想:
process date | ssn count
------------------------
20160430 | 8,000,000
20160551 | 8,500,000
... | ...
20160331 | 1,000,000
到目前爲止,我想出了以下(見下文,爲什麼它不」 t工作):
WITH valid_dates AS (
SELECT D.ProcessDate
FROM arcu.vwARCUProcessDates AS D
WHERE d.FullDate = D.MonthEndDate
AND d.ProcessDate >= @SDATE
)
SELECT sup.ProcessDate, COUNT(DISTINCT sup.SSN)
FROM MemberSuppTable as sup
WHERE (
AND sup.ProcessDate IN (SELECT * FROM valid_dates)
AND sup.MemberSuppID IN (
SELECT summ.MemberSuppID
FROM MemberSummaryTable as summ
WHERE (
summ.ProcessDate IN (SELECT * FROM valid_dates)
AND summ.AccountNumber IN (
SELECT acct.AccountNumber
FROM AccountTable as acct
WHERE (
acct.ProcessDate IN (SELECT * FROM valid_dates)
...
)
)
)
)
)
GROUP BY (sup.ProcessDate)
隨着上述但是我相信,如果一個成員與valid_dates表中的ANY進程日期的條件匹配,那麼它將包含在所有組中。
任何人都可以幫我嗎? (我是SQL新手,如果我遺漏了一些簡單的東西,請原諒我。)
包含示例數據和期望結果。 [**如何創建一個最小,完整和可驗證的示例**](http://stackoverflow.com/help/mcve) –
期望的結果是在問題的中間......你是說你想要的精確的表格? – LukeP
好像你正在使用許多'IN()'語句,改變它們加入它會更容易閱讀和理解,並且可能會更有效。 – sagi