我有一个包含部分用户名和IP地址的表,类似于下面的内容。
我正在尝试设计一个查询,该查询将返回已由多个用户使用的IP地址,以及用户名。因此,鉴于上述情况,我想要返回的唯一记录将是最后两个,因为有两个不同的用户使用相同的地址。
我试过
SELECT [IP Address], [User's Name]
FROM tempIPFails
GROUP BY [IP Address], [User's Name]
HAVING COUNT([User's Name]) > 1
ORDER BY [IP Address], [User's Name]
但这根本不会返回任何记录。
有人可以帮助我走上正轨吗?
答案 0 :(得分:1)
您的查询未返回任何行的原因是您按用户名进行分组。得到你想要的:
SELECT [IP Address]
FROM tempIPFails
GROUP BY [IP Address]
HAVING COUNT(*) > 1
ORDER BY [IP Address];
如果您想要与这些IP地址关联的完整记录,请将其加回原始数据:
select tipf.*
from tempIPFails tipf join
(SELECT [IP Address]
FROM tempIPFails
GROUP BY [IP Address]
HAVING COUNT(*) > 1
) badips
on tipf.[IP Address] = badips.[IP Address];
答案 1 :(得分:1)
我认为这应该可以解决问题:
SELECT [IP Address], COUNT([User's Name])
FROM tempIPFails
GROUP BY [IP Address]
HAVING COUNT([User's Name]) > 1
ORDER BY [IP Address]
您需要按ID_ADDRES分组,然后计算有多少名称匹配相同的IP。 你几乎在那里:)