1. Einleitung Die Anforderung besteht darin, die Differenz und das Verhältnis zwischen den Stundendaten und den vorherigen Stundendaten innerhalb eines bestimmten Zeitraums zu ermitteln. Ursprünglich dachte ich, es wäre ein ganz einfaches Zuerst hatte ich keine Ahnung, also fragte ich Der Blogger hier verwendet eine dumme Methode, um dies zu erreichen. Wenn Sie eine einfachere Methode kennen, geben Sie mir bitte Ihren Rat. Der Kommentarbereich wartet auf Sie! MySQL-Version: mysql> Version auswählen(); +---------------------+ | version() | +---------------------+ | 10.0.22-MariaDB-Protokoll | +---------------------+ 1 Zeile im Satz (0,00 Sek.) 2. Abfrage der Differenz zwischen jeder Stunde und der vorherigen Stunde 1. Anforderungen aufteilen Lassen Sie uns hier separat abfragen, um zu sehen, wie viele Daten vorhanden sind, um die nachfolgende Kombination zu erleichtern. (1) Bezug stündlichen Datenvolumens Zur Vereinfachung der Anzeige werden sie hier direkt zusammengeführt und es werden nur die Daten von Wählen Sie Anzahl(*) als Nums, Datumsformat(log_time, „%Y-%m-%d %h“) als Tage aus dem Test, wobei 1 und log_time >= „2020-04-19 00:00:00“ und log_time <= „2020-04-20 00:00:00“, gruppieren Sie nach Tagen; +----------+--------------+ | Zahl | Tage | +----------+--------------+ | 15442 | 19.04.2020 01 | | 15230 | 19.04.2020 02 | | 14654 | 19.04.2020 03 | | 14933 | 19.04.2020 04 | | 14768 | 19.04.2020 05 | | 15390 | 19.04.2020 06 | | 15611 | 19.04.2020 07 | | 15659 | 19.04.2020 08 | | 15398 | 19.04.2020 09 | | 15207 | 19.04.2020 10 | | 14860 | 19.04.2020 11 | | 15114 | 19.04.2020 12 | +----------+--------------+ (2) Ermitteln Sie die Datenmenge der letzten Stunde Wählen Sie Anzahl(*) als Nums1, Datumsformat (Datumssub (Datumsformat (log_time), „%Y-%m-%d %h“), Intervall -1 Stunde, „%Y-%m-%d %h“) als Tage ab Test, wobei 1 und log_time >= „2020-04-19 00:00:00“ und log_time <= „2020-04-20 00:00:00“, nach Tagen gruppieren; +----------+--------------+ | Zahl1 | Tage | +----------+--------------+ | 15114 | 19.04.2020 01 | | 15442 | 19.04.2020 02 | | 15230 | 19.04.2020 03 | | 14654 | 19.04.2020 04 | | 14933 | 19.04.2020 05 | | 14768 | 19.04.2020 06 | | 15390 | 19.04.2020 07 | | 15611 | 19.04.2020 08 | | 15659 | 19.04.2020 09 | | 15398 | 19.04.2020 10 | | 15207 | 19.04.2020 11 | | 14860 | 19.04.2020 12 | +----------+--------------+ Beachten:
2. Kombinieren Sie diese beiden Daten und sehen Sie wähle Nums, Nums1, Tage, Tage1 aus (Wählen Sie count(*) als Nums, date_format(log_time,'%Y-%m-%d %h') als Tage ab Test, wobei 1 und log_time >='2020-04-19 00:00:00' und log_time <= '2020-04-20 00:00:00' nach Tagen gruppieren) als m, (Wählen Sie Anzahl(*) als Nums1, Datumsformat (Datumssub (Datumsformat (log_time), '%Y-%m-%d %h'), Intervall -1 Stunde), '%Y-%m-%d %h') als Tage1 aus Test, wobei 1 und Log_Time >= '2020-04-19 00:00:00' und Log_Time <= '2020-04-20 00:00:00', gruppieren Sie nach Tagen1) als n; +-------+-------+---------------+---------------+ | Nums | Nums1 | Tage | Tage1 | +-------+-------+---------------+---------------+ | 15442 | 15114 | 19.04.2020 01 | 19.04.2020 01 | | 15442 | 15442 | 19.04.2020 01 | 19.04.2020 02 | | 15442 | 15230 | 19.04.2020 01 | 19.04.2020 03 | | 15442 | 14654 | 19.04.2020 01 | 19.04.2020 04 | | 15442 | 14933 | 19.04.2020 01 | 19.04.2020 05 | | 15442 | 14768 | 19.04.2020 01 | 19.04.2020 06 | | 15442 | 15390 | 19.04.2020 01 | 19.04.2020 07 | | 15442 | 15611 | 19.04.2020 01 | 19.04.2020 08 | | 15442 | 15659 | 19.04.2020 01 | 19.04.2020 09 | | 15442 | 15398 | 19.04.2020 01 | 19.04.2020 10 | | 15442 | 15207 | 19.04.2020 01 | 19.04.2020 11 | | 15442 | 14860 | 19.04.2020 01 | 19.04.2020 12 | | 15230 | 15114 | 19.04.2020 02 | 19.04.2020 01 | | 15230 | 15442 | 19.04.2020 02 | 19.04.2020 02 | | 15230 | 15230 | 19.04.2020 02 | 19.04.2020 03 | Es ist ersichtlich, dass diese Kombination dem verschachtelten Schleifeneffekt im Programm ähnelt, der gleichbedeutend damit ist, dass foreach($arr als $k=>$v){ foreach($arr1 als $k1=>$v1){ } } Können wir in diesem Fall in zwei Schleifen-Arrays dieselben Werte finden und dann die Differenz berechnen, wie wir es normalerweise beim Schreiben von Programmen tun? Es ist offensichtlich, dass die Daten hier exakt gleich sind und als Vergleichsbedingungen verwendet werden können. 3. Anwendungsfall …wann soll die Differenz berechnet werden? select (case when days = days1 then (nums - nums1) else 0 end) als diff aus (Wählen Sie count(*) als Nums, date_format(log_time,'%Y-%m-%d %h') als Tage ab Test, wobei 1 und log_time >='2020-04-19 00:00:00' und log_time <= '2020-04-20 00:00:00' nach Tagen gruppieren) als m, (Wählen Sie Anzahl(*) als Nums1, Datumsformat (Datumssub (Datumsformat (log_time), '%Y-%m-%d %h'), Intervall -1 Stunde), '%Y-%m-%d %h') als Tage1 aus Test, wobei 1 und Log_Time >= '2020-04-19 00:00:00' und Log_Time <= '2020-04-20 00:00:00', gruppieren Sie nach Tagen1) als n; Wirkung: +------+ | Unterschied | +------+ | 328 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | |-212 | | 0 | | 0 Sie können diesen foreach($arr als $k=>$v){ foreach($arr1 als $k1=>$v1){ wenn($k == $k1){ //Finde den Unterschied} } } Als Ergebnis können wir sehen, dass es viele 4. Filtern Sie den Teil mit dem Ergebnis 0 heraus und vergleichen Sie die endgültigen Daten Hier wird select (case when days = days1 then (nums1 - nums) else 0 end) als diff aus (Wählen Sie count(*) als Nums, date_format(log_time,'%Y-%m-%d %h') als Tage ab Test, wobei 1 und log_time >='2020-04-19 00:00:00' und log_time <= '2020-04-20 00:00:00' nach Tagen gruppieren) als m, (Wählen Sie Anzahl(*) als Nums1, Datumsformat (Datumssub (Datumsformat (log_time), '%Y-%m-%d %h'), Intervall -1 Stunde), '%Y-%m-%d %h') als Tage1 aus Test, wobei 1 und Logzeit >= '2020-04-19 00:00:00' und Logzeit <= '2020-04-20 00:00:00', gruppieren Sie nach Tagen1) als n mit Unterschied <>0; Ergebnis: +------+ | Unterschied | +------+ |-328 | | 212 | | 576 | |-279 | | 165 | |-622 | |-221 | |-48 | | 261 | | 191 | | 347 | |-254 | +------+ Hier sehen wir die berechneten Ergebnisse, also vergleichen wir sie. Hier sind einige manuell aufgelistete Daten:
Man erkennt, dass die Differenz tatsächlich erfolgreich erzielt werden konnte. Wenn Sie das Verhältnis der Differenz erhalten möchten, 5. Holen Sie sich den Datenrückgang für diese und die letzte Stunde und zeigen Sie die Nummer jedes Rückgangsbereichs an Wir können die ursprüngliche Fall auswählen wenn Tage = Tage1 und (Anzahl1 - Anzahl)/Anzahl1 < 0,1 dann 0,1 wenn Tage = Tage1 und (Anzahl1 - Anzahl)/Anzahl1 > 0,1 und (Anzahl1 - Anzahl)/Anzahl1 < 0,2 dann 0,2 wenn Tage = Tage1 und (Anzahl1 - Anzahl)/Anzahl1 > 0,2 und (Anzahl1 - Anzahl)/Anzahl1 < 0,3 dann 0,3 wenn Tage = Tage1 und (Anzahl1 - Anzahl)/Anzahl1 > 0,3 und (Anzahl1 - Anzahl)/Anzahl1 < 0,4 dann 0,4 wenn Tage = Tage1 und (Anzahl1 - Anzahl)/Anzahl1 > 0,4 und (Anzahl1 - Anzahl)/Anzahl1 < 0,5 dann 0,5 wenn Tage = Tage1 und (Anz.1 - Anz.)/Anz.1 > 0,5 dann 0,6 sonst 0, Ende als diff, count(*) als diff_nums aus (Wählen Sie count(*) als Nums, date_format(log_time,'%Y-%m-%d %h') als Tage ab Test, wobei 1 und log_time >='2020-03-20 00:00:00' und log_time <= '2020-04-20 00:00:00' nach Tagen gruppieren) als m, (Wählen Sie Anzahl(*) als Nums1, Datumsformat (Datumssub (Datumsformat (log_time), „%Y-%m-%d %h“), Intervall -1 Stunde, „%Y-%m-%d %h“) als Tage1 aus Test, wobei 1 und Logzeit >= „2020-03-20 00:00:00“ und Logzeit <= „2020-04-20 00:00:00“ nach Tagen1 gruppieren) als n nach Differenz gruppieren, wobei die Differenz >0 ist; Ergebnis:
Abschluss 1. Ergänzende Einführung: Der Unterschied zwischen der MySQL-Datenbankzeit und der tatsächlichen Zeit beträgt 8 Stunden url=jdbc:mysql://127.0.0.1:3306/somedatabase?characterEncoding=utf-8&serverTimezone=GMT%2B8 Fügen Sie &serverTimezone=GMT%2B8 nach der Datenbankkonfiguration hinzu Dies ist das Ende dieses Artikels über MySQL-Abfragen der Differenz zwischen stündlichen Daten und vorherigen stündlichen Daten. Weitere relevante Inhalte zu MySQL-Stundendatendifferenzen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: JavaScript zum Implementieren einer zufälligen Namensaufruf-Webseite
>>: Detaillierte Erklärung der Mencached-Cache-Konfiguration basierend auf Nginx
Die Gesamtarchitektur von NGINX ist durch eine Re...
Umgebungsbeschreibung Serversystem: Ubuntu 18.04 ...
Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...
Ich glaube, jeder ist mit Datenbankindizes vertra...
Designspezifikationen für WeChat Mini-Programmkom...
Manchmal müssen Sie Links verwenden, aber Sie müss...
1. Konfigurieren Sie die lokale Yum-Quelle 1. Mou...
Originalartikel, bei Nachdruck bitte Autor und Qu...
Wir verwenden normalerweise Routing in Vue-Projek...
Vorwort Weil dies ein verteiltes Dateisystem ist,...
Wenn Sie beim Konfigurieren von proxy_pass in ngi...
Wir alle kennen den Befehl tr, mit dem Ersetzunge...
Inhaltsverzeichnis Überblick 1. Hook-Aufrufreihen...
Hintergrund Da ich alle meine Aufgaben auf Docker...
a href="#"> Nach dem Klicken auf den ...