Durch kurzfristige Umstellung von mysql auf PostgreSQL benötige ich eine adäquate Funktionalität zu meinem mysql-Statement. In diesem Statement hole ich mir die Daten nach gewissen zeitbereichen (z.B. gesammelte Daten von 15 Minuten). Das mysql-Statement sieht dabei folgendermaßen aus:
Code:
SELECT FROM_UNIXTIME(
CEILING(UNIX_TIMESTAMP(St_TimeStamp)/900)900) AS timeslice, COUNT() AS mycount
FROM statistic
WHERE St_TimeStamp >= ‘2010-12-16 09:00:00’
AND St_TimeStamp < ‘2010-12-18 16:30:00’
GROUP
BY timeslice
In Postgree gibt es diese UNIX_TIMESTAMPS nicht, ich habe auch schon mit diversen TIMESTAMPS probiert, z.B.
Code:
TIMESTAMP ‘epoch’ + St_TimeStamp * INTERVAL ‘1 second’
komme aber auf kein Ergebnis. Die Abfrage soll mir an erster Stelle den Zeitstempel in einem korrekten Datumsformat liefern. Kann mir hierbei jemand helfen, wie ich mein Statement umbauen muss?
select extract(‘epoch’ from ‘2010-12-21 13:45:00’::timestamp)::int / (15 * 60);
ist ein gültiges Postgree-SQL-Statement? Da bekomm ich massenweise Fehler.
Meine Aufgabenstellung ist es, eine Spalte auf Grund eines in der Tabelle vorhandenen Timestamps zu gruppieren → d.h. z.B. viertelstündlich aufsummieren von Statistikwerten.
SELECT to_timestamp(extract (‘epoch’ from St_TimeStamp))
AS timeslice,
sum(St_Objects_Pass), sum(St_Objects_Rej_1), sum(St_Objects_Rej_2), sum(St_Sort_Weight_Pass), sum(St_Sort_Weight_Rej_1), sum(St_Sort_Weight_Rej_2), sum(St_Valve_Act_Rej_1), sum(St_Valve_Act_Rej_2), sum(St_NE_Objects), sum(St_Cornsize_25), sum(St_Cornsize_Median), sum(St_Cornsize_75), sum(St_Object_Class_0), sum(St_Object_Class_2), sum(St_Object_Class_3), sum(St_Object_Class_4), sum(St_Object_Class_5), sum(St_Object_Class_6), sum(St_Object_Class_7), sum(St_Object_Class_8), sum(St_Object_Class_9), sum(St_Object_Class_10), sum(St_Object_Class_11), sum(St_Object_Class_12), sum(St_Object_Class_13), sum(St_Object_Class_14), sum(St_Object_Class_15)
FROM statistic
WHERE Ma_ID=4 AND Si_ID=1 AND St_TimeStamp >‘2010-12-20 13:07:29’ AND St_TimeStamp<‘2010-12-22 13:07:29’
GROUP BY timeslice order by timeslice;
So sieht mein komplettes Statement derzeit aus. Liefert mir nun
Ich habe da wohl in meinem SQL-Editor eine Option “Allow using of parameters in query text” aktiviert, deswegen funktionierte das Statement bei mir nicht.
Hab das Ganze nun auf
SELECT extract (‘epoch’ from St_TimeStamp)::int / (15 * 60)
AS timeslice, sum(St_Objects_Pass), …
FROM statistic
WHERE Ma_ID=4 AND Si_ID=1 AND St_TimeStamp >‘2010-12-20 13:07:29’ AND St_TimeStamp<‘2010-12-22 13:07:29’
GROUP BY timeslice order by timeslice;
umgebaut. Funktioniert soweit, nur für timeslice erhalte ich einen Wert (z.B.: 1.436.584), mit dem ich nichts anfangen kann, auch wenn ich den wert mittels to_timestamp versuche, umzuwandeln erhalte ich keinen sinnvollen Wert.
Danke schon mal für deine Geduld, ist nicht einfach mit mir