2015-12-03 6 views
1

У меня есть схема MySQL visits(name, vdate, vtime), которая представляет собой снимок всех гостей в доме. Я хочу перечислить самые загружаемые дни - то есть те, у кого больше всего посетителей. Так что сПоказаны разные столбцы с максимальным числом строк

john | 2000-01-01 | 13:00 
adam | 2000-01-01 | 13:00 
cary | 2000-01-01 | 13:00 
joan | 2000-01-01 | 15:00 
mary | 2000-01-01 | 15:00 
kate | 1950-11-11 | 02:00 

Идеальный выход будет

2000-01-01 | 13:00 | 3 
1950-11-11 | 02:00 | 1 

Я могу производить вывод, который также перечисляет 2000-01-01 | 15:00 | 2, но я не хочу этого; Я просто хочу, чтобы максимальное количество строк для этой даты: 3.

основной код:

SELECT vdate, vtime, COUNT(*) as cnt FROM visits GROUP BY vdate, vtime ORDER BY cnt DESC 

Я пробовал SELECT DISTINCT vdate (это не меняет результаты на всех). Я думаю, что может понадобиться какой-то второй запрос, который использует функцию MAX, но я не уверен, как это сказать.

+0

MYSQL MAX: http://www.tutorialspoint.com/mysql/mysql-max-function.htm –

ответ

0

Вот подход, который использует переменные и только один агрегацию:

select v.* 
from (select v.*, 
      (@rn := if(@vd = vdate, @rn + 1, 
         if(@vd := vdate, 1, 1) 
         ) 
      ) as rn 
     from (select vdate, vtime, count(*) as cnt 
      from visits 
      group by vdate, vtime 
      ) v cross join 
      (select @vd := 0, @rn := 0) params 
     order by vdate, cnt desc 
    ) v 
where rn = 1; 
Смежные вопросы