2015-03-23 5 views
0

У меня есть таблица базы данных с более чем 500 миллионов строк в нем, структурированные как:Сортировать таблицу по комбинированным рядам

|username |date  |  units| 
|user1  |2015-03-20|   5| 
|user2  |2015-03-20|   7| 
|user3  |2015-03-20|   3| 
|user1  |2015-03-21|   9| 
|user2  |2015-03-21|   4| 
|user3  |2015-03-21|   11| 

Это упрощен конечно, и около 2 миллионов уникальных имен пользователей в таблице , каждый из которых добавляет новую строку каждый день.

Самый лучший способ сортировать по наивысшей сумме Всего units за последние 7 дней (или последние 7 записей в базе данных по этому пользователю)? Мне нужно увидеть 25 лучших пользователей, возвратив их имя пользователя и их объединенные units.

ответ

0

фильтр, группировка, сортировка и ограничение:

SELECT username, SUM(units) 
FROM  myTable 
WHERE date >= CURRENT_DATE - INTERVAL 7 DAY -- filter 
GROUP BY username        -- group 
ORDER BY SUM(units) DESC      -- sort 
LIMIT 25          -- limit 

Этот запрос будет наиболее оптимальным с составным индексом, определенным над (username, date, units).

Смежные вопросы