bbrandmeier 0 Geschrieben 27. April 2014 Melden Teilen Geschrieben 27. April 2014 Hallo,ich habe da eine Tabelle mit Temperaturmesswerten und möchte daraus ein Diagramm erstellen.Die Tabelle besteht aus 2 Spalten, eine mit einem Zeitstempel (Unixzeit, Anzahl Sekunden seit 1.1.1970)die andere aus dem Messwert. In dieser Tabelle werden ca. alle 30 Sekunden ein neuer Messwert eingefügtund besteht mittlerweile aus mehreren Millionen Datensätzen. Nun kann ich mir mit einem 'SELECT * ... WHERE Zeit BETWEEN Zeit_Von AND Zeit_Bis' zwar den gewünschtenBereich auswählen, habe aber das Problem, das ich z.B. für einen Zeitraum von 6 Monaten einige HunderttausendDatensätze geliefert bekomme. Kennt jemand einen pfiffigen SQL-String, mit ich Stichpunktartig über den gewünschten Zeitraum jeweils einenSatz bekomme, so das ich im obigen Beispiel bei einem 'Stichpunktabstand' von 500 Sekunden nur noch so ca. 1000Sätzen für den gewünschten Zeitraum zurückbekomme ? schon mal Danke für Eure Hilfe, Bernd Zitieren Link zu diesem Kommentar
Doso 77 Geschrieben 27. April 2014 Melden Teilen Geschrieben 27. April 2014 Wie wäre es wenn du dir vorher ein paar Zeitpunkte berechnest und dann entsprechend mehrere SQL Abfragen damit machst? Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 28. April 2014 Melden Teilen Geschrieben 28. April 2014 Probier mal so etwas! SELECT * FROM Messwerte WHERE Zeit/500 = CAST(Zeit/500 AS int) AND Zeit BETWEEN Zeit_Von AND Zeit_Bis Zitieren Link zu diesem Kommentar
bbrandmeier 0 Geschrieben 28. April 2014 Autor Melden Teilen Geschrieben 28. April 2014 (bearbeitet) Danke für Eure Ideen, @Doso: Gut, die Zeitpunkte vorher berechnen wäre möglich, aber dann z. B 1000 SQL-Abfragen machen - geht das nicht all zu sehr auf die Performance ? @Pathomorph: Ich muss gestehen, ich komme bei deinem SQL-String nicht ganz mit. Zur Erinnererung, der Zeitstempel ist bei mir keine DateTime-Variable sondern vom Type Integer. Meinst so etwas ähnliches: SELECT DISTINCT * FROM Messwerte WHERE Zeit/500 BETWEEN Zeit_Von/500 AND Zeit_Bis/500 bearbeitet 28. April 2014 von bbrandmeier Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 28. April 2014 Melden Teilen Geschrieben 28. April 2014 Hi Ich meinte schon so, wie ich schrieb... Damit die gewünschten Ergebnisse geliefert werden, müssen die Zeitwerte irgendeiner mathematischen Regel gehorchen. Zeit_Von und Zeit_Bis müssen bleiben, damit du den gewünschten Zeitraum eingrenzen kannst. Meine Idee war: ... WHERE Zeit/500 = CAST(Zeit/500 AS int) ... Das zum Beispiel liefert all die Zeitwerte aus, bei denen die Division durch 500 ganze Zahlen ergibt. Das ist nur ein mathematischer Trick, mit dessen Hilfe, stichtpunktartige Datensätze geliefert werden, die relativ gleichmäßig im Zeitraum liegen... Fazit: SELECT * FROM Messwerte WHERE Zeit/500 = CAST(Zeit/500 AS int) AND Zeit BETWEEN Zeit_Von AND Zeit_Bis Test das mal?! Was gefällt dir dabei nicht? Zitieren Link zu diesem Kommentar
bbrandmeier 0 Geschrieben 29. April 2014 Autor Melden Teilen Geschrieben 29. April 2014 Hallo, ok. Ich glaube, ich hab's kapiert. Gute Idee ! Wenn ich deinen SQL-String allerdings teste, werden trotzdem alle Sätze zwischen Zeit_Von und Zeit_Bis geliefert. Ich glaube es liegt am MS-SQL. Scheinbar wird intern das ... Zeit/500 ... vor dem Vergleich wieder in einen Ganzahlwert gewandelt. Ich kann das auch testen: Wenn ich folgendes probiere steht in beiden Spalten die gleiche Ganzzahl: SELECT Zeit/500 AS Erg1, CAST(Zeit/500 AS int) AS Erg2 FROM Messwerte Trotzdem, vielen Dank für deine Hilfe Bernd Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 29. April 2014 Melden Teilen Geschrieben 29. April 2014 Verstehe... Das Ergebnis von Zeit/500 hat den Feld-Typ von "Zeit", also Integer... Mach mal so: SELECT * FROM Messwerte WHERE CONVERT(float,Zeit)/500 = CAST(Zeit/500 AS int) AND Zeit BETWEEN Zeit_Von AND Zeit_Bis Gruß Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.