Heim  >  Fragen und Antworten  >  Hauptteil

Ich suche Hilfe bei der MySQL-Abfrage – Berechnen Sie die Zeitstempelanzahl innerhalb des gruppierten Bereichs

Manche Leute würden denken, dass das einfach ist, aber es hat eine ganze Nacht harter Arbeit gekostet. Ich habe ein Sensoralarmprotokoll und möchte eine Tabelle mit einer einfachen Zählung der Ereignisse über 24 Stunden, 168 Stunden (1 Woche) und 336 Stunden (2 Wochen) für jeden einzelnen Sensor erstellen. Ich bin relativ neu in MySQL (läuft auf GoDaddy) und Autodidakt. Ich habe alle Variationen von Count, Unique, Case usw. ausprobiert, die ich im Internet finden kann. Hilf mir, Obi-Wan...

Beispieldaten:

Alert_timestamp Sensor-ID
2022-05-18 21:41:59 Sensor 1
21.05.2022 21:52:09 Sensor 1
24.05.2022 05:00:39 Sensor 2
24.05.2022 05:02:26 Sensor 1
24.05.2022 18:37:34 Sensor 4
24.05.2022 20:48:40 Sensor 1
26.05.2022 21:20:54 Sensor 2
27.05.2022 14:53:02 Sensor 1
2022-06-01 19:06:14 Sensor 4
2022-06-02 19:22:27 Sensor 1
... ...

Gewünschte Ausgabe (Hinweis: Die unten aufgeführten Zahlen entsprechen nicht der Tabelle oben). Ich möchte diese auch dann sehen, wenn der Sensor keine Alarme hat (z. B. der Sensor ist in der Tabelle vorhanden, aber es gibt keine Ereignisse im Datumsbereich).

count of events that fall within these ranges
Sensor <24 Stunden 24 bis 168 Stunden 168 bis 336 Stunden
Sensor 1 1 1 0
Sensor 2 0 2 5
Sensor 3 0 0 0
Sensor 4 6 2 3

Vielen Dank im Voraus!

P粉026665919P粉026665919258 Tage vor605

Antworte allen(1)Ich werde antworten

  • P粉593536104

    P粉5935361042024-02-05 09:26:27

    使用条件聚合。

    SELECT SensorID, 
           SUM(    Alert_timestamp >  CURRENT_TIMESTAMP - INTERVAL  24 HOUR)  `<24hrs`,
           SUM(    Alert_timestamp <= CURRENT_TIMESTAMP - INTERVAL  24 HOUR
               AND Alert_timestamp >  CURRENT_TIMESTAMP - INTERVAL 168 HOUR)  `24 to 168hrs`,
           SUM(    Alert_timestamp <= CURRENT_TIMESTAMP - INTERVAL 168 HOUR
               AND Alert_timestamp >  CURRENT_TIMESTAMP - INTERVAL 336 HOUR)  `168 to 336hrs`       
    FROM table 
    WHERE Alert_timestamp > CURRENT_TIMESTAMP - INTERVAL 336 HOUR
    GROUP BY SensorID
    

    如果表包含“将来”的行,则将相应的条件添加到第一个聚合和 WHERE 中。

    (SensorID, Alert_timestamp) 的索引将会改善。

    Antwort
    0
  • StornierenAntwort