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

时间:2015-02-28 16:39:39

标签: sql database architecture

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

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

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

  • 使每个仪表值成为一个实体。该账单将有两个外键,每个米值一个。这样我就可以包含其他有用的数据,比如测量日期等。但是,实施和验证邻接会变得很棘手。
  • 将一对仪表值设为实体(或仪表值和差值)。该法案将引用该对。但是,这会导致数据重复。

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

1 个答案:

答案 0 :(得分:2)

首先,关系数据库中没有“相邻”行。表表示无序集。如果您有订购的概念,则需要使用行中的数据来实现。我假设您有某种“id”或“创建日期”来指定排序。

因为您没有指定数据库,所以我假设您有一个支持ANSI标准窗口函数的功能数据库。在这种情况下,您可以使用LAG()函数获得所需内容。获得之前抄表的语法如下:

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

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