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 两个日期之间的主要内容,如果未能解决你的问题,请参考以下文章