admin

Cumulative Difference

sql

我的表

Meter_Reading

MeterID    |    Reading     |     DateRead     |
1               10                1-Jan-2012
1               20                2-Feb-2012
1               30                1-Mar-2012
1               60                2-Apr-2012
1               80                1-May-2012

读数是一个累积值,在这里我需要计算与上个月和当前月份的差额。

您能帮我弄清楚如何生成一个视图,让我可以查看每个月的消耗量(前一个月的读数-本月的读数)吗?

我尝试了之间的功能:

select address, reading as Consumption, dateread
from ServiceAddress, reading, meter
where address like '53 Drip Drive%'
and dateread 
between (to_date('01-JAN-2012','DD-MON-YYYY')) and (to_date('30-SEP-2012', 'DD-MON-YYYY'))
and serviceaddress.serviceaddid = meter.serviceaddid and meter.meterid = reading.meterid;

但是我所得到的只是每个月的读数而不是差异。

如何列出每月的消费量?


阅读 179

收藏
2021-06-07

共1个答案

admin

您可以使用该LAG功能获取上个月的读数。查询您发布引用3个tables–
ServiceAddressReadingMeter其中没有一个是Meter_Reading表您发布的结构和数据。由于我不确定这些表中的数据是什么样子,因此将忽略您发布的查询,并将重点放在Meter_Reading为之发布数据的表上

SELECT MeterID, 
       DateRead,
       Reading,
       PriorReading,
       Reading - PriorReading AmountUsed
  FROM (SELECT MeterID,
               DateRead,
               Reading,
               nvl(lag(Reading) over (partition by MeterID 
                                          order by DateRead), 
                   0) PriorReading
          FROM meter_reading)

我假设如果没有以前的阅读,您想假设以前的阅读为0

2021-06-07