【发布时间】:2015-08-18 14:18:29
【问题描述】:
假设我有一张如下表
date add_days
2015-01-01 5
2015-01-04 2
2015-01-11 7
2015-01-20 10
2015-01-30 1
我想要做的是检查days_balance,即如果date大于或小于前一个日期+ N天(add_days),如果它们是连续系列,则取累计天数总和.
所以算法应该像这样工作
for i in 2:N_rows {
days_balance[i] := date[i-1] + add_days[i-1] - date[i]
if days_balance[i] >= 0 then
date[i] := date[i] + days_balance[i]
}
预期的结果应该如下
date days_balance
2015-01-01 0
2015-01-04 2
2015-01-11 -3
2015-01-20 -2
2015-01-30 0
纯SQL可以吗?我想它应该带有一些条件连接,但看不到它是如何实现的。
【问题讨论】:
-
如果您使用的是 PostgreSQL 9.1.13 或更高版本,则需要查看 PostgresSQL 中的
lag和lead窗口函数。另外,您如何计算第一条记录的 previous_date 和 previous_add_days? -
@FutbolFan 按当前和以前的日期我是指后续行 - 为了清楚起见,我将进行编辑。
-
是的,我知道了。但是,对于 date =
2015-01-01的行,我要问的是该记录的 previous_date 和 previous_add_days 是多少? -
预期结果是否正确?第四行不应该是-5吗?这是我的数学:第 01 天到第 4 天 = 0 余额减去 3 天变化 + 5 add_days = 2;第 04 天到第 11 天 = 2 余额减去 7 天变化 + 2 add_days = -3;第 11 天到第 20 天 = -3 余额减去 9 天变化 + 7 add_days = -5;第 20 天到第 30 天 = -5 余额减去 10 天变化 + 10 add_days = -5;
-
@FutbolFan 我更新了我的问题和伪代码 - 现在清楚了吗?
标签: sql postgresql