Hallo liebe Gemeinde,
ich habe folgendes Problem:
Ich habe eine Tabelle mit einer Reihe von Messwerten, die alle mit einem Zeitstempel versehen sind. Diese Daten möchte ich in einem Diagramm darstellen. Wenn ich nun den darzustellenden Zeitraum sehr groß wähle macht es keinen Sinn, alle Werte darzustellen, da die Datenmenge sehr groß wird.
Mein Problem ist nun, die SQL abfrage so zu formulieren, dass ich nur jeden xten wert aus der Datenbank bekommen, sodass der Zeitstempel des folgende Datensatz beispielsweise mindestens 3 sekunden größer ist als der des aktuellen.
ein Beispiel:
meine Tabelle hat folgenden Inhalt:
timestamp Wert
2010-07-01 15:00:00 2,3
2010-07-01 15:00:01 2,5
2010-07-01 15:00:02 2,9
2010-07-01 15:00:03 2,5
2010-07-01 15:00:04 2,4
2010-07-01 15:00:05 2,3
2010-07-01 15:00:06 2,2
2010-07-01 15:00:07 2,2
2010-07-01 15:00:08 2,1
2010-07-01 15:00:09 2,1
2010-07-01 15:00:10 2,0
das ergebnis soll so aussehen:
2010-07-01 15:00:00 2,3
2010-07-01 15:00:03 2,5
2010-07-01 15:00:06 2,2
2010-07-01 15:00:09 2,1
Hat jemand eine Idee?
Ich stehe gerade ein bisschen auf dem Schlach.
Vielen Dank im Vorraus,
Robert
Code:SELECT timestamp, wert FROM ( SELECT timestamp, wert, timestamp - lag(timestamp) over (order by timestamp) as diff FROM the_table_with_no_name ) t wHERE diff > interval '3' second
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hmm, das sind zwei vollkommen unterschiedliche Konzepte.
CTE faktoriert letztendlich sub-queries aus dem Statement heraus, so dass die Teilergebnisse (mehrfach) wiederverwendbar sind (also im Grunde ein view "on-the-fly".
Windowing functions erlauben eine Gruppierung von Daten innerhalb eines nicht (oder anders) gruppierten Result-Sets bei gleichzeitigen Zugriff auf beliebige Teile der einzelnen Gruppen.
Das ist schon etwas anderes (und beides ist vollständig unabhängig von dem anderen verwendbar)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Jo, danke für die super schnelle Antwort!
Nachdem ich jetzt auch auf PostgreSQL 8.4 umgestiegen bin, konnte ich den Query mal nachvollziehen.
Er macht zwar das, was er soll, aber nicht das was ich meinte
Er sucht _aufeinanderfolgende_ Zeilen, die einen Abstand von hier mindestens 3 sekunden haben.
Allerdings haben die Zeilen in der Tabelle alle einen fixen Abstand. Es sollen bei der Ausgabe des Ergebnisses so lange Zeilen ausgelassen werden, bis eine Zeile erreicht ist, deren Zeitstempel 3 Sekunden großer ist, als der der zuletzt ausgegebenen.
Hm, ist das verständlich??
AndreasCode:test=*# select * from nioc limit 10; ts | value ---------------------+-------------------- 2010-08-25 00:00:00 | 0.619806560687721 2010-08-25 00:00:01 | 0.45592790003866 2010-08-25 00:00:02 | 0.208332412410527 2010-08-25 00:00:03 | 0.467778811231256 2010-08-25 00:00:04 | 0.709810342639685 2010-08-25 00:00:05 | 0.147713274229318 2010-08-25 00:00:06 | 0.684980425052345 2010-08-25 00:00:07 | 0.0645707873627543 2010-08-25 00:00:08 | 0.397614741697907 2010-08-25 00:00:09 | 0.688825995661318 (10 rows) test=*# select * from nioc where mod((extract(epoch from ts))::int ,3) = 0 limit 10; ts | value ---------------------+------------------- 2010-08-25 00:00:00 | 0.619806560687721 2010-08-25 00:00:03 | 0.467778811231256 2010-08-25 00:00:06 | 0.684980425052345 2010-08-25 00:00:09 | 0.688825995661318 2010-08-25 00:00:12 | 0.884086264297366 2010-08-25 00:00:15 | 0.139217745512724 2010-08-25 00:00:18 | 0.252522758208215 2010-08-25 00:00:21 | 0.303016524761915 2010-08-25 00:00:24 | 0.095765620470047 2010-08-25 00:00:27 | 0.735997097566724 (10 rows)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen