Daten in abhängigkeit von anderen Datensätzen abfragen

Arcano69

Neuer Benutzer
Beiträge
3
Hallo liebe Forenmitglieder,
ich habe Folgende Datenbanktabelle:

DB.PNG

Und bisher sieht meine Abfrage so aus:
$dbh= new PDO('mysql:host=localhost;dbname=master;charset=utf8', $user, $pass);
$sth = $dbh->prepare("SELECT time, date, watertemp, airtemp, pressure FROM batchtest1 WHERE nr='$num'");
$sth->execute();

Nun bin ich auf der suche nach einem weg meine Abfrage der Datensätze zu filtern.
Und zwar möchte ich gern ALLE Datensätze weglassen bei denen sich der Index (ind) bei gleicher Nr (nr) innerhalb einer Sekunde (time entspricht typ time) nur um +/- 4 ändert.

Zur Erklärung: Einem Ereignis wird eine Nr zwischen 1&50 zugeordnet (je nach Art des Ereignis), es wird mit einem Zeitstempel versehen, in die Datenbank eingetragen und in dieser mit einem Index (AUTO_INCREMENT) versehen. Nun entstehen, apparaturbedingt, Fehlaufzeichnungen welche sich von der normalen Aufzeichnung unterscheiden indem das Ereignis mehr mals in einer Sekunde auftritt. Um die Stammdaten nicht per Hand bereinigen zu müssen habe ich gehofft dies bei der Abfrage lösen zu können.

Verzeiht mir evtl. Formfehler, dies ist mein allererster Post...

Vielen Dank für eure Hilfe
Arcano
 
Werbung:
Das geht sehr einfach über Window-Funktionen wie z.b. lag(), mit denen man auf vorhergehende Records (nach einem Partitionierungs- und Sortierkriterium) zugreifen kann, die MySQL aber nicht kann.

Grüße aus Tallinn.
 
Hallo,
Danke für die schnelle Antwort. Jedoch verwende ich die ausgelesenen Datensätze anschließend in einem Javascript und gebe sie so über den Browser in Diagrammen aus...
Gibt es browserbasierend keine andere Lösung dafür?
Gruß
Arc
 
Okay... Nach kurzem recherchieren habe ich gemerkt, das meine Antwort roßer Quatsch war... Hast du evtl. eine JOOQ Lösung für mich?
Gruß
Arcano
 
Werbung:
Das geht auch (mit schlechterer Performance) unter MySQL:
Code:
SELECT   t.[time],t.[date],t.watertemp,t.airtemp,t.pressure
FROM   batchtest1 t
WHERE NOT EXISTS (

SELECT   1
FROM   batchtest1
WHERE   ind BETWEEN t.ind - 4 AND t.ind + 4
AND     datediff(second,cast([date] AS DATETIME) + [time],cast(t.[date] AS DATETIME) + t.[time]) BETWEEN -1 AND 1

     )
Jetzt habe ich cast() und datediff() verwendet, eventuell geht das unter MySQL anders. Auch bin ich mir nicht ganz sicher ob ich deine WHERE Bedingung richtig verstanden habe, aber das Prinzip der Abfrage bleibt.
 
Zurück
Oben