sql计算每日总数减去前一天的总数

时间:2010-02-06 21:05:46

标签: sql ms-access recursive-query

我有一张有日期,项目和数量的表格。

我需要一个sql查询来返回每天的总数,但总数是数量减去前一天的总数。随着月份的增加,数量会累积。因此,第一个可以有5个,第二个有12个,第三个有20个。

所以第1加5 第二名加7获得12 第3次加8来制作20。

我过去做过类似的事情,却无法找到或记住。我知道我需要一个相关的子查询。

TIA

-

编辑1

我正在使用Microsoft Access。 日期是日期时间字段, item是一个文本,和 数量是数字

-

编辑2

好的,这就是我的

SELECT oos.report_date, oos.tech, oos.total_cpe, oos_2.total_cpe
   FROM oos INNER JOIN (
     SELECT oos_2.tech, Sum(oos_2.total_cpe) AS total_cpe
     FROM oos_2
     WHERE (((oos_2.report_date)<#10/10/2010#))
     GROUP BY oos_2.tech
   ) oos_2 ON oos.tech = oos_2.tech;

如何将oos.report_date放入我所说的#10/10/2010#。我以为我可以像mysql一样坚持下去,但没有运气。我要继续研究。

2 个答案:

答案 0 :(得分:0)

通过在日期中添加一个并使值为负值来求和它们,从而从今天起计算昨天的总数:

SELECT report_date, tech, Sum(total_cpe) AS total_cpe 
FROM (
    SELECT oos.report_date, oos.tech, oos.total_cpe
    FROM oos 
    UNION ALL
    SELECT oos.report_date+1, oos.tech, 0-oos.total_cpe 
    FROM oos 
)
WHERE (report_date < #10/10/2010#) 
GROUP BY report_date, tech 
ORDER BY report_date, tech 

答案 1 :(得分:0)

好的,我明白了。

SELECT o.report_date, o.tech, o.total_cpe, 
o.total_cpe -  (
    SELECT  IIf(Sum(oos.total_cpe) is null, 0,Sum(oos.total_cpe)) AS total_cpe 
    FROM oos 
    WHERE (((oos.tech)=o.tech) AND ((oos.report_date)<o.report_date))
) AS total
FROM oos o;