1

太陽光発電データ (pvdata) の MySQL テーブルがあり、そこから毎月の要約テーブルを作成する必要があります。簡単な表を以下に示します。

ID 日時 pvdata
1 2012-01-01 10:00 50
1 2012-01-31 12:00 60
1 2012-02-10 13:00 70
2 2012-02-08 10:00 12
2 2012-03-20 10:00 17

その月のデータを受信したかどうかに関係なく、月次サマリー テーブルには、データベース内のすべてのシステムの累積世代を表示する必要があります。たとえば、以下の月 3 には、id = 1 (月 2 に受信したデータ) からの合計世代が含まれます。

また、同じ月に 1 つの ID に対して複数のデータ ポイントが存在する可能性があるため、レポートではその月の最大 (データ) を報告する必要があります。

年 月 cum_data
2012 1 60
2012 2 82
2012 3 87

私はこれにかなり慣れていないので、しばらく苦労しました。私が思いつくことができる最高のものは、その月の累積合計を示していますが、当月にデータがない id の累積合計は含まれていません。

CREATE TEMPORARY TABLE intermed_gen_report  
SELECT year(date) AS year, month(date) AS month, id, max(pvdata) AS maxpvdata
FROM pvdata
GROUP BY id, year(date), month(date)
ORDER BY year(date), month(date);

SELECT year, month, SUM(maxpvdata) AS cum_data
FROM intermed_gen_report
GROUP BY year, month
ORDER BY year, month;

与える:

年 月 cum_data
2012 1 60
2012 2 82
2012 3 17

4

2 に答える 2

1

問題は次のようなものだと思います http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/ - 日付を含むテーブル (おそらく一時的なもの) を作成する必要があります(または年/月の値)。ただし、その例では、データがない場合はゼロのままです。その日付(または年/月の値)より前の最新のデータを返すサブセレクトで結合を実行する必要があると思います。

于 2012-04-04T17:57:11.233 に答える
1

Aerik の提案に同意します。通常「日付ディメンション テーブル」と呼ばれるもののデータを結合する必要があります。上記のテーブルにデータを入力する方法については、多くの例を見つけることができます。これは、データ ウェアハウスの一般的な手法です。

サブ選択を使用して、1 つの選択で必要なことを実行することもできます。次のような以前のスレッドのいくつかを見てください:日付範囲から日を生成する

于 2012-04-04T18:39:58.700 に答える