计算与先前记录的差异

Joh*_*nny 6 sql ms-access subquery

我可以请你帮忙吗?

我试图计算我的结果中从一个记录到下一个记录的变化.如果我向您展示我当前的查询和结果,它可能会有所帮助......

SELECT A.AuditDate, COUNT(A.NickName) as [TAccounts],
       SUM(IIF((A.CurrGBP > 100 OR A.CurrUSD > 100), 1, 0)) as [Funded]
FROM Audits A
GROUP BY A.AuditDate;
Run Code Online (Sandbox Code Playgroud)

查询给了我这些结果......

AuditDate D/M/Y         TAccounts     Funded                    
--------------------------------------------
30/12/2011              506           285
04/01/2012              514           287
05/01/2012              514           288
06/01/2012              516           288
09/01/2012              520           289
10/01/2012              522           289
11/01/2012              523           290
12/01/2012              524           290
13/01/2012              526           291
17/01/2012              531           292
18/01/2012              532           292
19/01/2012              533           293
20/01/2012              537           295
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想得到的结果将类似于以下内容......

AuditDate D/M/Y         TAccounts     TChange   Funded           FChange
------------------------------------------------------------------------
30/12/2011              506           0         285              0
04/01/2012              514           8         287              2
05/01/2012              514           0         288              1
06/01/2012              516           2         288              0
09/01/2012              520           4         289              1
10/01/2012              522           2         289              0
11/01/2012              523           1         290              1
12/01/2012              524           1         290              0
13/01/2012              526           2         291              1
17/01/2012              531           5         292              1
18/01/2012              532           1         292              0
19/01/2012              533           1         293              1
20/01/2012              537           4         295              2 
Run Code Online (Sandbox Code Playgroud)

查看'17/01/2012'的行,'TChange'的值为5,因为'TAccounts'从之前的526增加到531.而'FChange'将基于'Funded'字段.我想要注意的事实是这个例子的前一行是'13/01/2012'.我的意思是,有些日子我没有数据(例如在周末).

我想我需要使用SubQuery,但我真的很想弄清楚从哪里开始.你能告诉我如何得到我需要的结果吗?

我正在使用MS Access 2010

非常感谢你的时间.

约翰尼.

Sky*_*nel 1

这是您可以尝试的一种方法......

SELECT B.AuditDate,B.TAccounts,
    B.TAccount - 
    (SELECT Count(NickName) FROM Audits WHERE AuditDate=B.PrevAuditDate) as TChange,
    B.Funded - 
    (SELECT Count(*) FROM Audits WHERE AuditDate=B.PrevAuditDate AND (CurrGBP > 100 OR CurrUSD > 100)) as FChange
FROM (
SELECT A.AuditDate,
    (SELECT Count(NickName) FROM Audits WHERE AuditDate=A.AuditDate) as TAccounts,
    (SELECT Count(*) FROM Audits WHERE (CurrGBP > 100 OR CurrUSD > 100)) as Funded,
    (SELECT Max(AuditDate) FROM Audits WHERE AuditDate<A.AuditDate) as PrevAuditDate
FROM
(SELECT DISTINCT AuditDate FROM Audits) AS A) AS B
Run Code Online (Sandbox Code Playgroud)

我没有使用 a,而是Group By使用子查询来获取 TAccounts 和 Funded,以及先前的审核日期,然后将其用于主数据库SELECT再次获取 TAccounts 和 Funded,但这次是前一个日期,以便任何所需的可以针对它们进行计算。

但我想这可能处理起来很慢