Mehrere Abfragen derselben Column in einer Intervall-Abfrage

schurmak

Neuer Benutzer
Beiträge
3
Guten Tag zusammen

Ev kann mir ja jemand einen Schubs in die richtige Richtung geben.
Ich habe eine Tabelle die wie folgt aussieht:

timestamp | cmd | user
2021-10-04 14:20:00 write du
2021-10-04 14:20:02 write ich
2021-10-04 14:20:00 read du
2021-10-04 14:20:00 delete du


Nun hätte ich gerne die 'cmd' gezählt in 5 Minuten Intervallen.
SELECT FROM_UNIXTIME(FLOOR((UNIX_TIMESTAMP(log_datetime))/300)*300) AS date, count(cmd) as fileoperations from foc GROUP BY date ORDER BY date LIMIT 10;

+---------------------+----------------+
| date | fileoperations |
+---------------------+----------------+
| 2021-09-13 09:45:00 | 155 |
| 2021-09-13 09:50:00 | 49 |
| 2021-09-13 09:55:00 | 14 |
| 2021-09-13 10:05:00 | 3 |
| 2021-09-13 10:10:00 | 108 |
| 2021-09-13 10:15:00 | 4 |
| 2021-09-13 10:20:00 | 52 |
| 2021-09-13 10:25:00 | 5 |
| 2021-09-13 10:30:00 | 58 |
| 2021-09-13 10:35:00 | 143 |
+---------------------+----------------+

Das funktioniert soweit so gut. Nun möchte ich aber zusätzlich noch die count's für die verschiedenen Operationen in 'cmd' erhalten:

+---------------------+--------+---------+---------+-------+---------+----------------+
| date | writen | deleted | renamed | moved | created | fileoperations |
+---------------------+--------+---------+---------+-------+---------+----------------+
| 2021-09-13 09:48:00 | 8 | 1 | 3| 5 | 2 | 8 |
| 2021-09-13 09:49:00 | 147 | 2 | 4 | 1 | 4 | 147 |
...
+---------------------+--------+---------+---------+-------+---------+----------------+

Kann mir jemand einen Tipp geben, wie ich das am besten angehe?

Besten Danke und viele Grüsse
Kurt
 
Werbung:
Hallo,
das scheint einfach zu sein. Ändere dein QUERY von:

Code:
SELECT FROM_UNIXTIME(FLOOR((UNIX_TIMESTAMP(log_datetime))/300)*300) AS date, count(cmd) as fileoperations FROM ....


zu

Code:
SELECT
   FROM_UNIXTIME(FLOOR((UNIX_TIMESTAMP(log_datetime))/300)*300) AS date, count(cmd) as fileoperations,
   SUM( IF( cmd == 'write', 1, 9)) as written,
   SUM( IF( cmd == 'read', 1, 9)) as had_read
FROM foc GROUP BY date ORDER BY date LIMIT 10;


Die SUM Zeilen musst du natürlich noch erweitern bzw in gewünschte Reihenfolge bringen.

Gruß

Bernd
 
UPS, da ist ein typo in meiner antwort. es muss natürlich 1,0 und nicht 1,9 heissen

SUM( IF( cmd == 'read', 1, 0)) as had_read
 
Das habe ich dann bemerkt. Aber das war ganz gut so, so hab ich alles mal genau durchgesehen

Merke: liefere NIE, niemals NIE eine 100% Lösung. Baue IMMER einen Fehler ein. Oder liefere eine Lösung für ein anderes DBMS - als das angefragte - und überlasse dem Fragesteller die Lösung als Übungsaufgabe zu finden. Mache ich immer schon so ...
 
Werbung:
Zurück
Oben