我有一个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 :(得分: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;