[gelöst] Frage zu einer SQL Query

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
schorsch_76
Beiträge: 2629
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] Frage zu einer SQL Query

Beitrag von schorsch_76 » 27.08.2009 08:03:32

Hallo Debianfreunde!

Momentan mach ich grad ein kleines Perl-Projekt für meine Photovoltaikanlage. Dazu lese ich per cronjob alle 15 min die Daten aus meinen Wechselrichtern aus und schiebe diese in eine mySQL Tabelle namens solarData. Diese enthält unteranderem folgende Daten:

id, inverter_id, yield_this_day, yield_total (also seit inbetriebnahme des WR), date_time (im DATETIME Format).

Diese Daten werden immer angefügt und die id wird per auto_increment hochgezählt.

Jetzt möchte ich aus dieser Tabelle den Ertrag für Heute, diese Woche, diesen Monat, dieses Jahr rausbekommen.

Für "Diesen Tag" Hab ich es wie folgt gemacht:

Code: Alles auswählen

SELECT yield_this_day from solarDATA
WHERE inverter_id = 1/2
ORDER BY date_time DESC
LIMIT 1
yield_this_day wird dann in perl aufsummiert.
Wie mach ich das jetzt aber für diese Woche/Monat/Jahr? Der Punkt an dem ich hänge, ich muss irgendwie immer den letzten Eintrag eines Tages rausbekommen. Am besten wäre ein SQL Query das mir alle letzten Eintrage eines Tages für einen WR ausgibt. Im obigen Beispiel hab ich halt mit Order und Limit getrickst. Die Einträge über den Tag über brauche ich für die Kurvendarstellungen über den Tag.

Ich steh auf dem schlauch :?

Gruß

schorsch
Zuletzt geändert von schorsch_76 am 27.08.2009 10:05:12, insgesamt 1-mal geändert.

Benutzeravatar
schorsch_76
Beiträge: 2629
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zu einer SQL Query

Beitrag von schorsch_76 » 27.08.2009 10:04:53

Ok,

nach einigem Dokuwälzen und dem "auffrischen" von SQL ;) bin ich auf eine Lösung gekommen.

Code: Alles auswählen

CREATE TEMPORARY TABLE tmp_solarData 
  `date_time` datetime default NULL,
  `yield_this_day` double default NULL,
  `yield_total` double default NULL
) ENGINE=MyIsam DEFAULT CHARSET=latin1;
	 
INSERT INTO tmp_solarData 
	SELECT date_time, yield_this_day, yield_total
	WHERE 
	inverter_id=$inverter_id
	AND
	date_time between $date 00:00:00 AND $date 23:59:59;


SELECT MIN(date_time),MAX(date_time) FROM tmp_solarData;

SELECT yield_total FROM tmp_solarData
	WHERE
	date_time IN ($min_dt, $max_dt) 

DROP TABLE tmp_solarData ;

my $yield = $yield_total[1] - yield_total[0]

Gruß

schorsch

Antworten