引用关系数据库中的两个相邻行

Referencing two adjacent rows in a relational database

在我的数据库中,我有一个 table 必须从另一个 table 的两个相邻行获取信息。

请允许我演示。有一张账单计算两个 相邻 表值之间的差异并相应地计算成本(即,我有一个水表,如果我想计算我应该在 12 月支付的金额,我取我在 11 月测量的值,并从 12 月的值中减去它)。

我的问题是,如何以最佳方式实现引用?我在想:

有没有更好的方法?非常感谢。

首先,关系数据库中没有 "adjacent" 行这样的东西。表代表无序集。如果您有排序的概念,则需要使用行中的数据来实现。让我假设您有某种指定顺序的 "id" 或 "creation date"。

因为您没有指定数据库,所以我假设您有一个支持 ANSI 标准 window 函数的功能数据库。在这种情况下,您可以使用 LAG() 函数获得您想要的。获取先前仪表读数的语法类似于:

select lag(value) over (partition by meterid order by readdatetime)

不需要数据重复或一些神秘的数据数据结构。 LAG() 也应该能够利用适当的索引。