计算时间顺序记录之间的差值(LibreOffice Base)

时间:2014-05-12 18:22:01

标签: sql hsqldb delta libreoffice-base

我对SQL很新,我面临的这个问题我无法用现有的知识解决(在短短几天内就不可能成为SQL专家)。

考虑一下我有一个简单的表:

ID  Date        Counter
1   03/25/14    291.5
2   03/25/14    310
3   03/25/14    270.9
4   03/25/14    320
1   04/25/14    293
2   04/25/14    311
3   04/25/14    278.3
4   04/25/14    322.1

基本上每月一次为每个用户添加一些计数器的读数。我希望能够创建一个查询,计算与上个月值相比的Counter值的增量。结果应该看起来像这样:

ID  Date        Counter  PrevMonthDelta
1   04/25/14    293      1.5
2   04/25/14    311      1
3   04/25/14    278.3    7.4
4   04/25/14    322.1    2.1

我目前正在使用默认的HSQLDB格式数据库在LibreOffice Base中进行实验,但我认为这应该与其他SQL DB类似。

提前致谢!

1 个答案:

答案 0 :(得分:1)

通常,您可以将表连接到自身,使得生成的连接表具有两个月的值。然后,您可以对这些值执行计算。像

这样的东西
SELECT ID, T2.DATE, T2.COUNTER - T1.COUNTER FROM T T1, T T2 WHERE T1.ID = T2.ID AND YEAR (T1.DATE) = YEAR(T2.DATE) AND MONTH(T1.DATE) + 1 = MONTH (T1.DATE)

如果条件需要涵盖年末,请使用以下内容:

AND YEAR (T1.DATE) + (MONTH(T1.DATE) / 12) = YEAR(T2.DATE) AND (MONTH(T1.DATE) MOD 12) + 1 = MONTH (T1.DATE)

如果您的实际列名称区分大小写,请使用双引号,例如“Counter”。