2016-02-07 2 views
2

У меня есть таблица downloads, которая записывает каждый раз, когда пользователь загружает файл. Я хочу написать запрос, который возвращает самые последние загрузки x, но покажет пользователю не более одного раза. Например, говорят, что это порядок, в котором был загружен файл, и я хочу, чтобы получить самые последние 2 загрузки:Отличие, порядок в 1 запросе

// Downloads table 
1. Steve - 12:01am 
2. James - 12:02am 
3. John - 12:03am 
4. Steve - 12:04am 
5. Steve - 12:05am 

select distinct(username), created_at 
from downloads 
group by username, created_at 
order by created_at desc limit 2 

// Result SHOULD be 
Steve - 12:05am 
John - 12:03am 

Правильно ли это? Есть ли способ для этого запроса в ActiveRecord без использования пользовательского запроса?

+1

'distinct' is *** NOT *** a функция. Он всегда применяется к ** всем ** столбцам в списке выбора. –

ответ

3

Вам нужно заказать по max(created_at), так как вы хотите самую последнюю загрузку, пользователь

select username, max(created_at) 
from downloads 
group by username 
order by max(created_at) desc 
limit 2 

username уже будет уникальным, поскольку вы группировки по этой колонке, поэтому нет необходимости использовать distinct

активная запись

Downloads 
.select("max(created_at),username") 
.group("username") 
.order("max(created_at) desc") 
.limit(2); 
Смежные вопросы