2017-08-22 3 views
-1

ich eine Tabelle abfragen möchten, die wie istmysql Gruppe basierend auf Zeitintervallen

Tabellenstruktur für Tabellen Archiv

|------ 
|Column|Type|Null|Default 
|------ 
|//**id**//|int(11)|No| 
|datetime|timestamp|No|CURRENT_TIMESTAMP 
|gatewayid|int(11)|No| 
|RSSI|float|No| 
|distance|float|No| 
|beaconid|int(11)|No| 
== Dumping data for table archive 

|1|2017-08-22 12:14:19|1|-65|36|1 
|2|2017-08-22 12:14:19|2|-60|30|1 
|3|2017-08-22 12:14:19|3|-60|30|1 
|4|2017-08-22 12:14:19|1|-52|63|2 
|5|2017-08-22 12:14:19|2|-36|33|2 
|6|2017-08-22 12:14:19|3|-65|33|2 
|7|2017-08-22 12:14:19|1|-69|66|3 
|8|2017-08-22 12:14:19|2|-65|33|3 
|9|2017-08-22 12:14:19|3|-66|33|3 
|10|2017-08-22 12:16:09|1|-65|36|1 
|11|2017-08-22 12:16:09|2|-60|30|1 
|12|2017-08-22 12:16:09|3|-60|30|1 
|13|2017-08-22 12:16:09|1|-52|63|2 
|14|2017-08-22 12:16:09|2|-36|33|2 
|15|2017-08-22 12:16:09|3|-65|33|2 
|16|2017-08-22 12:16:09|1|-69|66|3 
|17|2017-08-22 12:16:09|2|-65|33|3 
|18|2017-08-22 12:16:09|3|-66|33|3 
|19|2017-08-22 12:32:05|1|-65|36|1 
|20|2017-08-22 12:32:05|2|-60|30|1 
|21|2017-08-22 12:32:05|3|-60|30|1 
|22|2017-08-22 12:32:05|1|-52|63|2 
|23|2017-08-22 12:32:05|2|-36|33|2 
|24|2017-08-22 12:32:05|3|-65|33|2 
|25|2017-08-22 12:32:05|1|-69|66|3 

I RSSI Werte basieren auf Thesen mitteln wollen Regeln - Gruppe basiert auf gatewayid , Beaconid und Datetime - die Gruppe von Datetime sollte in alle 5 Minuten zum Beispiel

gut in der Tat möchte ich RSSI Werte für RSSI Rayleigh, die ihre Beaconid und Gatewayid sind die gleichen und sie sind in einem 5-Minuten-Schritten hinzugefügt, ich diese Abfrage hier geschrieben haben

select DATE_ADD('1900-01-01T00:00:00',INTERVAL 15+TIMESTAMPDIFF(minute, '1900-01-01T00:00:00', datetime) minute), 
     (sum(RSSI)/count(*)) as mean_rssi, 
     (sum(distance)/count(*)) as mean_distance, 
     beaconid, 
     gatewayid 
from archive 
GROUP by DATE_ADD('1900-01-01T00:00:00',INTERVAL 15+TIMESTAMPDIFF(minute, '1900-01-01T00:00:00', datetime) minute), 
     beaconid, 
     gatewayid 

ist sqlfiddle für Anweisung diese Abfrage gibt alle Zeilen zurück, ohne Änderungen zu erstellen, wo mache ich falsch? Dank

+0

Siehe: [Warum sollte ich ein MCVE für eine scheinbar einfache SQL-Abfrage bereitstellen?] (Https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an- mcve-for-was-scheint-zu-mir-sein-eine-sehr-einfache-sql-Abfrage) – Strawberry

+0

@Strawberry Hallo, Vielen Dank für Ihren Kommentar, ich habe meine Frage aktualisiert, können Sie bitte überprüfen, ob es ist in Ordnung? –

Antwort

1

Ihre Anfrage korrekt zu sein scheint, es ist nur, dass Ihre Daten auf Intervall eindeutig ist/beaconid/getewayid so dass es zurück geschieht ‚alle‘ Reihen ...

Wenn ich Ihre Daten verstehen Sie wahrscheinlich wollen group by 5-Minuten-Intervallen und einen Wert zu erhalten, die das gleiche für jedes fünf Minuten-Intervall ist einfach entscheiden kann den Zeitstempel von 300 Sekunden teilen - so etwas wie:

select min(`datetime`) as `start`, 
    (sum(RSSI)/count(*)) as mean_rssi, 
    (sum(distance)/count(*)) as mean_distance, 
    beaconid, 
    gatewayid 
from archive 
group by UNIX_TIMESTAMP(`datetime`)/60*5, 
    beaconid, 
    gatewayid 

auch sqlfiddle verwenden oder es rextester ist viel einfacher um Ihnen zu helfen, wenn Sie diese verwenden ...

+0

danke sehr, ich denke, meine eigene Abfrage gibt das gleiche wie Ihre, ich habe versucht, sqlfiddle zu verwenden, aber ich sah Fehler wegen meiner Internetverbindung –

+0

@MajidHojati hier arbeitet Geige: http://sqlfiddle.com/#!9/8962a2/5 – user3012759

+0

wow, vielen dank –

Verwandte Themen