我目前有一张图表显示了按日累计的总数,但我真正追求的是当天的边际增长,即增量。怎么能通过查询来完成?不幸的是,累积总量是API提供的所有内容。
这是我的表:
org: cumulative_donations_count: created_at:
Goodwill 650 2017-02-28 18:50:20.654996
Goodwill 300 2017-02-27 18:50:20.654996
Goodwill 250 2017-02-26 18:50:20.654996
Goodwill 100 2017-02-25 18:50:20.654996
采取的步骤 - 我开始通过| date,value |遍历self.where(org: goodwill).pluck(created_at:, donations_count:)
数组。试图通过数组中各自的索引值来比较日期,但我们的首席工程师希望它完全通过查询来完成。我还想过添加一个列来显示差异,但我们想对这些值运行许多不同的计算。
对于组织需要的记录数量,if <= 1
存在[[2017-02-28, 350],[2017-02-27, 50], [2017-02-26, 150], [2017-02-25, nil]]
的基本情况,应该返回nil。显然,created_at:value不会完全落后1天(以毫秒为单位)。
可以说,有类似的问题,但这个例子的条件很简单,对许多读者都有用。
更新 - 预期输出
[pi_home]
path = /home/pi
writeable = yes
guest ok = yes
create mask = 0664
directory mask = 0755
force user = pi
答案 0 :(得分:2)
如果我理解正确,那么你将在SQL中使用lag()
:
select org, cumulative_donations_count, created_at,
(cumulative_donations_count -
lag(cumulative_donations_count, 1, 0) over (partition by GoodWill order by created_at)
) as inc
from t;
这使用lag()
的{{3}}。第二个参数是要返回的记录数。第三个是第一个记录的值(当没有先前的记录时)。
答案 1 :(得分:1)
假设count列中没有空值,您可以使用lag
获取前一行的值,并从当前行的值中减去它以获得delta。对于每个组的第一行(按created_at排序),差异将为null
。 (如果需要0
)
lag
select org,created_at,
cumulative_donations_count - lag(cumulative_donations_count) over(partition by org order by created_at) as delta_from_prev_day
from yourtable