SQL Sum QTY 两个日期之间

Posted

技术标签:

【中文标题】SQL Sum QTY 两个日期之间【英文标题】:SQL Sum QTY Between Two Dates 【发布时间】:2022-01-24 05:03:00 【问题描述】:

我有这个示例表:

Product    |   Category    |    QTY      |   Load Date
-----------+---------------+-------------+--------------
   1            Alpha           10         Jan. 1, 2021
   2            Beta            20         Jan. 1, 2021
   3           Charlie          20         Jan. 1, 2021
   1            Alpha           30         Jan. 2, 2021
   3           Charlie          30         Jan. 3, 2021
   1            Alpha          -50         Jan. 4, 2021
   2            Beta           -20         Jan. 4, 2021
   4            Delta           40         Jan. 4, 2021

我想添加一个列,该列将根据上一个加载日期对数量求和,并按产品和类别分组。

我怎样才能得出如下所示的输出?

Product    |   Category    |    QTY      |   Load Date   |  Sum_QTY
-----------+---------------+-------------+---------------+----------
   1            Alpha           10         Jan. 1, 2021       10
   2            Beta            20         Jan. 1, 2021       20
   3           Charlie          20         Jan. 1, 2021       20
   1            Alpha           30         Jan. 2, 2021       40
   3           Charlie          30         Jan. 3, 2021       50
   1            Alpha          -50         Jan. 4, 2021      -10
   2            Beta           -20         Jan. 4, 2021        0
   4            Delta           40         Jan. 4, 2021       40

您的帮助意义重大。

谢谢

【问题讨论】:

请向我们展示您的尝试并解释卡在哪里。 【参考方案1】:

如果我没有正确阅读问题,使用SUM as an analytic function 将使查询变得相当简单;

SELECT *,
 SUM("QTY") OVER (PARTITION BY "Product", "Category" ORDER BY "Load Date") Sum_QTY
FROM Table1
ORDER BY "Load Date", "Product", "Category"

An SQLfiddle to test with

【讨论】:

我认为最好使用 [Load Date] 而不是 "Load Date" 。 . . @zambee 除了在 DBMS 和 [ ] 之间使用 " " 是可移植的(ish)之外,是否有区别? (老实说,如果有区别,我不知道) 您好@Joachim Isaksson 先生,我认为 [] 更好。因为在 Dynamic SQL "" 中会给开发和调试带来很大的问题。【参考方案2】:

另一种选择是使用外部应用

select t.*, 
       s.sum_QTY
from   Table1 t
  outer apply ( select sum(t2.QTY) sum_QTY from Table1 t2 where t2.Category = t.Category and t2.[Load Date] <= t.[Load Date] ) s
ORDER BY [Load Date], Product, Category

SQL Fiddle

【讨论】:

以上是关于SQL Sum QTY 两个日期之间的主要内容,如果未能解决你的问题,请参考以下文章

按日期部分比较实体框架中的SQL日期时间

开始日期和结束日期之间每个项目的 MS SQL Server QUERY SUM

在 SQL 中计算不同日期之间 sum() 的差异

mybatis传输日期字符串sql诡异报错

mybatis传输日期字符串sql诡异报错

sql运行总计