0

頭がよくわからないという問題があり、誰かが私にアドバイスをくれることを願っています。

家の屋根に太陽光発電セルを取り付けて以来、私は発電を続けており、この種のことを行うためのいくつかの (かなり寛大な) インセンティブに従って、発電した電力のすべての kWh に対してお金を稼いでいます。これはちょっとしたデータベース プロジェクトであると考えて、毎日の発電量を追跡するために PHP/MySQL を書き始めました。現在、ほぼ 1 年分の毎日の kWh 測定値が得られています。 -月ごとのビュー、および年ごとの (月ごとにグループ化された) グラフ。

私は現在、システムを拡張して、電力の kWh ではなく金銭で収益を表示したいと考えています。現在、この数値は kWh あたり 0.454 ポンドですが、この数値は毎年 4 月 1 日に変更されます (以前は 0.433 ポンドでした)。

これは私の現在のMySQL構造です:

Table feedin:
  year (year4)   rate (float)
  2010           0.433
  2011           0.433
  2012           0.454

Table generation:
  day (DATE)     reading (float)
  2011-12-01     7.682
  2011-12-02     5.747
  2011-12-03     4.982
  ...            ...
  2012-08-13     8.022
  2012-08-14     19.449
  2012-08-15     5.484

これに対する私の最初の試みは、PHP と MySQL のクエリが非常に混ざり合っており、ロジックの大部分が PHP で実行されているため、かなり面倒でした (私の MySQL スキルはせいぜい「制限されています」)。しかし、時間が経つにつれ、MySQL ですべてを実行できれば理想的であることがわかりました。

これに対処する方法がわかりません。私が最初に考えたのは、データの年単位のチャンク (つまり、ある年の 4 月 1 日から次の 3 月 31 日までの日付範囲) を選択し、それに適切な年率を掛ける必要があるということです。そして、その「適切な年率は、その日付範囲の開始時、つまり 4 月 1 日時点で適用される率です。」

理想的には、クエリが複数の年次境界に対応できるようにしたいので、たとえば、数年後、これまでに生み出された絶対的な総収益をクエリできるようにしたいと考えています。最終的には、クエリに開始日と終了日を渡すだけで、正しい数字が返されます。

4

3 に答える 3

0

生成日の年を固定価格買取制度の年にリンクする

SELECT *, generation.reading*feedin.rate AS profit
 FROM generation, feedin
 WHERE YEAR(generation.day)=feedin.year

しかし、これは4月1日の年の始まりに関連している必要があるため

SELECT *, generation.reading*feedin.rate AS profit
 FROM generation, feedin
 WHERE YEAR(DATE_SUB(generation.day, INTERVAL 3 MONTH))=feedin.year

これにより、記録された日付も3か月前に戻され、4月から3月ではなく1月から12月になり、フィードイン年と一致します。

于 2012-08-16T11:33:47.600 に答える
0

これがあなたが望むことを願っています(テスト済みで動作しています) SELECT (a.rate*b.reading),a.year as amount from generation as b, feedin as a where Year(b.day)=a.year

于 2012-08-16T11:54:23.853 に答える
0

これらの行に沿って何か:

select year, sum(reading) as total_generation, (total_generation*feedin.rate) 
FROM feedin 
LEFT JOIN generation on feedin.year = YEAR(generation.day)
GROUP BY year
于 2012-08-16T11:35:59.397 に答える