首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求和到某一点

求和到某一点
EN

Stack Overflow用户
提问于 2012-05-24 02:34:53
回答 1查看 2.6K关注 0票数 0

我有一个库存交易表。我需要选择最后几笔交易的日期,直到调整后的数量大于库存中的当前金额。

我正在处理三个列:item, transaction_date, adj_qty。每个项目将有多个交易日期和调整数量。

如何返回每一项的所有transaction_dates,直到该项达到某个阈值(即累加100)。假设第一个项目有2000笔交易,最后五笔交易的数量都是21。我希望查询返回最后5个事务,因为那是当项目达到100的时候。

如果可能的话,我想在没有循环或游标的情况下这样做。

有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-24 02:44:44

你需要的是一个累积的总和。这已内置于SQL Server 2012中。

遗憾的是,您需要使用自连接来完成此操作:

代码语言:javascript
复制
select t.item, t.transaction_date, t.adj_qty, 
       sum(tprev.adj_qty) as CumSum
from t t join
     t tprev
     on t.item = tprev.item and
        t.transaction_date >= tprev.transaction_date
group by t.item, t.transaction_date, t.adj_qty
having 100 between sum(tprev.adj_qty) -t.adj_qty + 1 and sum(tprev.adj_qty)

请注意使用self join和group by来进行累积求和。这并不令人愉快,但在SUM() over (partition by)函数中没有order子句是必要的。此累计总和将一个项目的第一个记录(按事务处理日期)到任何其他项目的所有内容相加。

然后,HAVING子句选择您正在查找的行,其中累积和已超过某个阈值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10725846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档