【问题标题】:Capping Running Total封顶运行总计
【发布时间】:2016-05-18 21:20:17
【问题描述】:

我有一个字段A,并希望按如下方式计算字段B

B是A的累计,每次累计超过900,B就应该从下一行的0开始重新开始累计,如图:

A       B
37      37
427     464
17101   17565
30      30      //Restart here because the previous value of B was >900
70      100
788     888
30      918
30      30
30      60
30      90
1120    1210
30      30
30      60
30      90
30      120

如何在 Sybase 中派生 B

【问题讨论】:

  • (1) 什么 RDBMS? (2) 请更好地格式化这个问题。您可以将表格数据标记为代码以保留间距和换行符。
  • 这似乎没有足够的信息来回答这个问题。 “每次累积分数超过 900”意味着对记录进行排序。 “我保留第一个实例”什么,并将其保留在哪里?
  • @ScottHunter 我的意思是第 3 行超过了 900 的总和,我保留它,但在第 4 行中,我从 A 中选择值而不做任何数学运算。
  • 嗨@user1950075,我已经编辑了你的问题,希望能澄清你的意图。如果我误解了,请随时恢复编辑。如果您向我们展示您所指的表的一些实际代码/架构,那么在这里真正有帮助的是,因为如果没有实际的表/列,很难编写一个查询来满足您的需求。
  • 您可以通过几个子选择和窗口查询来做到这一点:select * from (select *, lag(MultiplesOfNineHundred) LastMultiple from (select *, sum(A) over (order by Foo.Order rows between unbounded preceding and current row) / 900 as MultiplesOfNineHundred from Foo) a) b where LastMultiple = MultiplesOfNineHundred 我想 - 当我在 cmets 中编辑它时,我可能把自己搞混了...

标签: sql sap-iq


【解决方案1】:

Oracle 的 MODEL 函数可能正是您想要的。如果您使用 Oracle,以下网站上的 Number 7 将为您提供帮助。

【讨论】:

  • 这正是我想要的。虽然我使用的是 sybase,但我会尝试找到一个等效的模型。真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 2012-07-03
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多