2015-12-03 57 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; 
相关问题