我在SQL Server 2012中有一个表,我想找到从同一IP登录的用户,例如,在我的表中
Id UserName IpAddress
--------------------------------
1 test 192.168.0.1
2 test1 192.168.0.5
3 test3 192.168.0.1
4 test4 192.168.0.5
5 test 192.168.0.15
6 test5 192.168.0.25
我想得到这个结果
Id UserName IpAddress
1 test 192.168.0.1
2 test3 192.168.0.1
3 test1 192.168.0.5
4 test4 192.168.0.5
我写了这段代码:
SELECT
UserName, IpAddress, COUNT(*)
FROM
UserLogin
GROUP BY
UserName, IpAddress
HAVING
COUNT(*) > 1
但我的结果不正确。
感谢您的帮助
答案 0 :(得分:0)
您可以将COUNT
与PARTITION BY
子句一起使用,以获取每个IpAddress
切片的记录数。然后使用外部查询来获取具有大于1的总体的IpAddress
个切片:
SELECT Id, UserName, IpAddress
FROM (
SELECT Id, UserName, IpAddress,
COUNT(IpAddress) OVER (PARTITION BY IpAddress) AS cnt
FROM mytable) AS t
WHERE t.cnt > 1
答案 1 :(得分:0)
您可以使用OVER()
:
;WITH CTE AS
(
SELECT *,
COUNT(*) OVER(PARTITION BY IpAddress) N
FROM dbo.YourTable
)
SELECT Id,
UserName,
IpAddress
FROM CTE
WHERE N > 1;