我有一个表“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
或类似的东西,或者我可以吗?