这是一张表格
id date name 1 180101 josh 2 180101 peter 3 180101 julia 4 180102 robert 5 180103 patrick 6 180104 josh 7 180104 adam
我需要获取所有与“josh”同一天的名字。如果不将整个表格组合在一起,我怎么能实现它。我需要保持高效(这不是我的真实表,我只是在这里简化了我的问题,我有数十万条记录,99% 的行都有不同的日期,所以按日期分组的行很少见)。
基本上我想要的是:如果“josh”是目标,我需要得到“josh、peter、julia、adam”(实际上前 10 个不同的名字与 josh 共享相同的日期)。
SELECT COUNT(date) as datecount, GROUP_CONCAT(DISTINCT name) as names, FROM table GROUP BY date HAVING datecount>1 // && name IN ('josh') would work nice for me, but im getting error because 'name' is not in GROUPED BY LIMIT 10
有什么想法吗?正如我提到的,它需要快速,并且大多数行都有唯一的日期
最佳答案
在 date
将表与自身连接:
select distinct t1.name
from tbl t1
join tbl t2 using (date)
where t2.name = 'josh'
为了获得最佳性能,您应该在 (name)
和 (date, name)
上建立索引。
关于mysql - 寻找使用 HAVING 过滤的 GROUP 行的低足迹解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55471922/