我试图在我的数据库中获得符合某些条件的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