2012-04-09 4 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 

Почему не первый столбец не получают отсортирован должным образом (по убыванию)?SQLite значения столбцов сортировки SUM

+1

Пожалуйста, не прикрепите заголовок тегом. – MPelletier

ответ

3

Перед тем, как они будут агрегированы, вы заказываете свой столбец bytes. Попробуйте следующее:

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

Вы объединяетесь в поле, которое вы пытаетесь отсортировать. Эти отдельные фрагменты данных больше не существуют сами по себе, а скорее всего для каждого элемента, который вы группируете.

Возможно, вы пытаетесь установить order by SUM(bytes)?

Кроме того, рассмотрите группировку по всем неагрегированным полям в инструкции выбора ... вам не хватает stamp_updated в группе.

+1

Очень хорошая точка с агрегированием 'stamp_updated'. Я бы предложил MAX, для чего, похоже, вопрос. – MPelletier

+0

Эта таблица содержит список IP-адресов src и получателей и объем трафика, который прошел. Я пытаюсь получить максимальное использование за определенный интервал (например, за последние 7 часов) – Anil