【问题标题】:Moving sum by date (MS Access SQL)按日期移动总和 (MS Access SQL)
【发布时间】:2018-07-20 14:28:07
【问题描述】:

我有一个表 A,其中有许多相同 CODNEGDate 的条目:

CODNEG  QUATOT  VOLTOT        Date
ABCD11     937  103070  31/01/2011
ABCD11    1976  205504  31/01/2011
ABCD11    1859  193336  31/01/2011
ABCD11    1026  110808  28/02/2011
ABCD11      49    4410  31/07/2011
XYZW11      35    3570  31/01/2011
XYZW11     627   63954  31/01/2011
     .       .       .           .
     .       .       .           .
     .       .       .           .

我正在尝试创建一个查询,其中的值是:(VOLTOT 的总和)/(QUATOT 的总和)对于相同的 过去十二个月的 CODNEG,例如,如果 Date 是 31/07/2011,我想对从 2010 年 8 月到 7 月的值求和/2011.

  • (1) 日期始终是该月的最后一天
  • (2) 过去十二个月的条目数可以是0到~250之间的任意整数

我发现了一些类似的问题,但我无法根据他们的解决方案解决这个问题,因为特殊性数字 (2) 使它变得不同。
我想知道是否可以做我想做的事情,如果可以,我该怎么做。任何帮助将不胜感激。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    您将使用相关子查询。根据您的日期算术,我认为这将是:

    select t.*,
           (select sum(a2.voltot) / sum(a2.quatot)
            from a a2
            where a2.codneg = a.codneg and
                  a2.date > dateadd("m", -12, date) and
                  a2.date <= date
           ) as ratio
    from a;
    

    如果您真的想要整整几个月,可能会稍微复杂一些,但想法是一样的。

    【讨论】:

      【解决方案2】:

      试试这个:

      注意 - 将字段 Date 重命名为 DT

      SELECT CODNEG, SUM(VOLTOT)/SUM(QUATOT ) AS Div, DT 
      FROM (SELECT *
      from tableA
      Where DT Between  DateSerial(Year(DT), Month(DT)-11, 1) And DateSerial(Year(DT), Month(DT)+1, 0))  AS T
      GROUP BY CODNEG, DT ;
      

      结果:(输入日期 - 07/31/2011

      【讨论】:

      • Select CODNEG , DTGroup By CODNEG, DT 中添加DT
      • 我想我错了。当我将DT 列放在Select CODNEG, DTGroup By CODNEG, DT 中时,它仍然提示输入日期,所以我尝试了DT 而不是[Enter Date],我得到了一个我相信这就是我正在寻找的输出为了。但是,我刚刚意识到,当我进行此更改时,它计算了Div使用具有相同CODNEGDT 的所有值(因为Group By)。我不知道我是否能够解释我想要做什么。我想要的输出将与您的解决方案中的输出一样,但是对于表 A 中的所有日期。这可能吗?
      • 我的意思是,我想使用来自DT 的过去十二个月的值来计算Div,而不是输入日期(Enter date),所以输出中的每一行会是这样的(CODNEG、QUATOT、VOLTOT、DT、Div):ABCD11 937 103070 31/01/2011 [DT value using this date]
      • 好的,给我一些时间。
      • 我已经更新了答案,这就是你要找的吗?
      猜你喜欢
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2021-06-02
      • 2019-06-01
      • 2013-04-21
      相关资源
      最近更新 更多