【发布时间】: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 中编辑它时,我可能把自己搞混了...