2012-04-09 13 views
-2
SELECT SUM(bytes),stamp_updated 
from acct 
where stamp_updated BETWEEN datetime('now', 'localtime','-7 hours') AND datetime('now', 'localtime') 
GROUP BY ip_src 
ORDER BY bytes DESC limit 10; 
 
    48498275|2012-04-09 11:26:01 
    6977282|2012-04-09 08:27:01 
    1192705|2012-04-09 08:46:02 
    3971336|2012-04-09 09:46:04 
    1909543|2012-04-09 11:28:04 
    265829|2012-04-09 09:11:02 
    1234909|2012-04-09 10:28:04 
    2396834|2012-04-09 11:28:02 
    192638|2012-04-09 09:00:01 
    30766141|2012-04-09 11:31:01 

Warum ist nicht die erste Spalte nicht richtig sortiert zu werden (DESC)?SQLite Sortier SUM Spaltenwerte

+1

Bitte, den Titel nicht mit einem Tag voranstellen. – MPelletier

Antwort

3

Sie bestellen mit Ihrer bytes Spalte, bevor sie aggregiert werden. Versuchen Sie dies:

SELECT SUM(bytes) AS total_bytes, stamp_updated 
FROM acct 
WHERE stamp_updated BETWEEN datetime('now', 'localtime','-7 hours') AND datetime('now', 'localtime') 
GROUP BY ip_src 
ORDER BY total_bytes DESC limit 10; 
1

Sie aggregieren auf dem Feld, nach dem Sie sortieren möchten. Diese einzelnen Datenelemente existieren nicht mehr alleine, sondern als Summe für jedes Element, nach dem Sie gruppieren.

Vielleicht versuchen Sie order by SUM(bytes)?

Abgesehen davon, berücksichtigen Sie die Gruppierung nach allen nicht aggregierten Felder in der Select-Anweisung ... Sie fehlen stamp_updated in der Gruppe von.

+1

Sehr guter Punkt mit Aggregation von 'stamp_updated'. Ich würde einen MAX vorschlagen, für den die Frage scheint. – MPelletier

+0

Diese Tabelle enthält eine Liste der src- und Ziel-IP-Adressen sowie die Menge des Datenverkehrs, der ausgeführt wurde. Ich versuche, die höchste Nutzung über ein bestimmtes Intervall (z. B. nach 7 Stunden) zu erhalten. – Anil