查找已从同一IP登录的用户

时间:2016-02-25 18:00:58

标签: sql sql-server stored-procedures

我在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

但我的结果不正确。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您可以将COUNTPARTITION 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;