Mysql 仅在点击次数超过2次的查询中显示结果
还没有找到解决办法- 假设这是查询的结果:Mysql 仅在点击次数超过2次的查询中显示结果,mysql,sql,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个或更多的记录,所以不需要分组 如何操作查询?假设日期不同,您可以使用exists: select t.* from t where exists (select 1
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个或更多的记录,所以不需要分组
如何操作查询?假设日期不同,您可以使用exists:
select t.*
from t
where exists (select 1
from t t2
where t2.id = t.id and t2.date <> t.date
);
根据问题的上下文,我将2以上解释为实际上是2或更多。否则就需要进行聚合。您必须分两个步骤进行聚合-一个步骤确定哪些ID具有倍数,另一个步骤选择它们 有很多方法可以做到这一点;在此版本中,对具有倍数的ID进行计数,然后单独选择数据 根据我过时的经验,大的一组可能会很慢。如果这个列表非常庞大,那么使用一个临时表来存储结果以便对其进行索引是有意义的。无论如何,id上的索引似乎只能起到帮助作用 从t中选择t.*,其中t.id在select id中,从c>1的t中计算*c
创建一个表,其中显示名为sumRecords的记录的出现次数,并将sumRecords与where occurrence>1的约束左连接 我指的是您的临时表,代码如下:
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
选择*FROM test,其中id在SELECT id FROM test GROUP BY id中,COUNTid>1 什么疑问?除了一些未格式化的结果之外,您没有显示任何内容。我格式化了它,但仍然不确定你在问什么对不起,我不太熟悉这里的格式,希望这是更好的。。。恕我直言,像这样的查询将包括一个SQL FIDLE或与之相当的示例数据和查询。照目前的情况,我们无法在不构成表和查询的情况下向您展示针对数据的真正查询。我想知道这是否比枚举不同的表和查询更快。不确定是比较日期还是计算我的答案更有效。你可以尝试两者进行比较,但如果在tid上有一个索引,这应该会更快,日期。