sqlite视图基于前一行计算值

时间:2018-04-12 11:04:32

标签: sql sqlite

我有一个表“data”,其中包含以下架构:

id  date                bw      bf
.   .                   .       .
33  2018-03-25 00:00:00 76.2    0.148
34  2018-04-01 00:00:00 75.9    0.148
35  2018-04-08 00:00:00 76.9    0.148

我用这个sql语句在该表上创建了一个视图:

create view eval as
select
a.*,
round(a.bw * a.bf,2) as bf_kg,
round(a.bw - b.bw,2) as d_bw,
round(a.bw * a.bf - b.bw * b.bf,2) as d_bf
from
data a
left join
data b on
a.id = b.id + 1

给了我:

id date                 bw      bf      bf_kg    d_bw  b_bf
0   2017-07-16 00:00:00 77.9    0.221   17.22    NULL  NULL
.   .                   .       .       .        .      .
33  2018-03-25 00:00:00 76.2    0.148   11.28    0.0   0.0
34  2018-04-01 00:00:00 75.9    0.148   11.23   -0.3  -0.04
35  2018-04-08 00:00:00 76.9    0.148   11.38    1.0   0.15
.   .                   .       .       .        .      .
37  2017-04-12 00:00:00 80.0    0.148   11.84   14.0   2.07

问题:

虽然视图按预期工作,但有一点需要注意。

我要确保在输入的日期之前无法输入数据。

我想减轻这一点,以便数据的初始顺序无关紧要,只有视图根据日期对数据进行排序,以根据“上一个”条目计算正确的值。 Id 37应该是基于日期的视图中的第一个“条目”,id 0不应该具有 null 值。

我怎样才能做到这一点?我可能无法使用id,所以唯一的方法是在日期加入:

 a.date = b.date

然后我将滚动窗口放在上一个条目上,因为我不能这样做:

 a.date = b.date + 1

或类似的东西,或者我可以吗?

0 个答案:

没有答案