还没找到解决方案......; - )
假设这是查询的结果:
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。
如何操纵查询?
答案 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