这是一张桌子
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%的行具有不同的日期,因此按日期分组的行很少见)。
所以基本上我想要的是:如果目标是“乔什”,我需要得到“乔什,彼得,朱莉娅,阿达姆”(实际上前10个不同的名称与乔什共享同一日期)。
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
有什么主意吗?正如我提到的,它需要快速,并且大多数行都有唯一的日期
答案 0 :(得分:1)
将表本身加入date
上:
select distinct t1.name
from tbl t1
join tbl t2 using (date)
where t2.name = 'josh'
为了获得最佳性能,您应该在(name)
和(date, name)
上建立索引。