Jump to content

Stichpunktartige Abfrage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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ügt
und 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ünschten
Bereich auswählen, habe aber das Problem, das ich z.B. für einen Zeitraum von 6 Monaten einige Hunderttausend
Datensätze geliefert bekomme.


Kennt jemand einen pfiffigen SQL-String, mit ich Stichpunktartig über den gewünschten Zeitraum jeweils einen
Satz bekomme, so das ich im obigen Beispiel bei einem 'Stichpunktabstand' von 500 Sekunden nur noch so ca. 1000
Sätzen für den gewünschten Zeitraum zurückbekomme ?

 

schon mal Danke für Eure Hilfe,

Bernd

Link zu diesem Kommentar

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 von bbrandmeier
Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...