0

十分なタイトルが思いつかなかったのですが、ここに質問があります。

私はアプリケーションにいくつかのテーブルを持っており、それらは他のものと一緒に電力会社の消費者のために毎月の請求書を生成します。具体的には、3つのテーブルが含まれます。1)消費者テーブル2)請求履歴テーブル3)料金表テーブル

さまざまなタイプの接続で消費されるユニットごとに異なる価格スラブがあります。たとえば、月に最大50ユニットを消費する国内接続は、月に50ユニットを消費する商用接続よりもかなり低い請求額になります。

構造はhttp://www.sqlfiddle.com/#!3/eeab6にあります

Consumersテーブルのapplication_natureフィールドは、COMMERCIALまたはDOMESTICの接続のタイプを定義します。

Billing_history2テーブルのpayment_statusは、請求書が支払われたかどうかを示すブール値を格納します。

このクエリを使用して、消費者の総消費量と延滞がある場合はそれを生成します。

SELECT BILLING_HISTORY2.CONSUMER_ID, count(reading) AS 'DEFAULT PERIOD', SUM(reading) AS 'Total Reading'  from BILLING_HISTORY2 where payment_status=0 GROUP by billing_history2.CONSUMER_ID;

ここで私が欲しいのは、1)最後に支払われた請求書以降に消費された合計ユニットに基づいて毎月の請求書を生成することです。2)その月以降に消費された合計ユニットに基づいて、延滞金を追加した月次請求書。

助言がありますか。

4

1 に答える 1

0

1)最後の請求書が支払われたときのルックアップ。何かのようなもの:

SELECT FROM BILLING_HISTORY2 where ID = 'CUSTOMERIDHERE' ORDER BY READING_MONTH_YEAR DESC 

2)その最初のレコードの日付変数を取得し、その日付以降に来た顧客のすべての読み取り値を検索します(これは、人々が当日の料金まで支払うことを前提としています)。

3)次に、ステップ2の基準に一致する各レコードをループするときに、合計料金を変数に合計します。

4)次に、「payment_status」が前の請求書が支払われていないことを示している場合は、手順1〜3を繰り返し、前月の日付のレコードを無視するようにします(その前の月を取得します)。また、日付範囲内の値のみを検索してください。したがって、前の請求書が2月1日に開始された場合、前月の範囲は1月1日から1月になります。31.そして、その請求書が支払われなかった場合は、12月1日から12月までの料金を検索します。31.基本的に、支払い済みの請求書(または存在しない請求書、それ以前はサービスがないことを意味する)が見つかるまで、一度に1か月前に戻り、見つけた値を全体の合計に追加する必要があります。

于 2013-02-17T06:19:16.760 に答える