2

私はテーブルを持っています

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;

しかし、私が得たのは、違いではなく、各月の測定値だけでした.

毎月の消費量を一覧表示するにはどうすればよいですか?

4

2 に答える 2

8

分析関数で試してください。このような何かがうまくいくはずです:

SELECT meterid, dateread, 
    reading - LAG(reading, 1, 0) OVER(PARTITION BY meterid ORDER BY dateread)
FROM meter_reading 
于 2012-11-19T18:58:32.670 に答える
3

関数を使用してLAG、前月の測定値を取得できます。投稿したクエリはServiceAddressReading、およびの 3 つのテーブルを参照していますMeterが、いずれも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 であると想定したいと思います。

于 2012-11-19T18:59:14.173 に答える