仅显示超过2次点击的查询结果

时间:2017-07-03 20:51:20

标签: mysql sql

还没找到解决方案......; - )

假设这是查询的结果:

ID, SUBS, DATE . 
19967,142, 2017-06-15 . 
20214,147, 2017-05-09 .
20214,137, 2017-06-07 . 
20303,147, 2017-05-31 .  

我只想要ID超过1次的记录,但我确实想要2条或更多条记录,所以不是GROUP BY。

如何操纵查询?

4 个答案:

答案 0 :(得分:0)

您可以使用exists,假设日期不同:

select t.*
from t
where exists (select 1
              from t t2
              where t2.id = t.id and t2.date <> t.date
             );

根据问题的背景,我解释&#34;超过2&#34;实际上是&#34; 2或更多&#34;。否则就需要聚合。

答案 1 :(得分:0)

您必须分两步完成 - 一个用于确定哪些ID具有倍数,另一个用于选择它们。

有很多方法可以做到这一点;在此版本中,计算具有倍数的ID,然后单独选择数据。

在我(过时的)体验中,大IN集可能会很慢。如果该列表最终变得很大,那么使用临时表来存储结果以便对它们进行索引是有意义的。无论如何,id上的索引似乎只能提供帮助。

select t.* from t where t.id in ( select id, count(*) c from t having c > 1)

答案 2 :(得分:0)

SELECT * FROM test WHERE id IN (SELECT id FROM test GROUP BY id HAVING COUNT(id) > 1);

答案 3 :(得分:-1)

创建一个表,其中显示名为sumRecords的记录的出现次数,并将约束为WHERE occurrence > 1的左连接sumRecords

我将您的表格称为temp以下是代码:

SELECT temp.* FROM 
temp LEFT JOIN 
(SELECT ID, COUNT(*) occurance
FROM temp
GROUP BY ID) sumRecords ON temp.ID = sumRecords.ID
WHERE sumRecords.occurance > 1

结果:

ID      subs     dat
20214   147     2017-05-09
20214   137     2017-06-07