SQL 服务器:return 每天只有最大值

SQL Server : return only max from count per day

以下查询 returns:多个日期(每个用户每天的计数)、IP 计数、用户名。

我需要它 return 每天只有用户的最大值(只有最高的)。

如果我从分组依据中删除用户名,它就可以正常工作。问题是我还需要 table 结果中的用户名。

我试过使用没有锁的子查询。

如有任何帮助,我们将不胜感激。

SELECT DISTINCT 
    FORMAT([UTCTimestamp], 'yyyy-MM-dd') AS 'DATE',
    T.Username,
    COUNT(clientIP) AS "CountClientIP" 
FROM
    dbo.tablename O
LEFT JOIN
    [DBNAME2]..vwAD_tablename T ON T.UserID = O.userID
LEFT JOIN
    [DBNAME1]..Event E ON E.Code = O.Code  
WHERE 
    FORMAT([UTCTimestamp], 'yyyy-MM-dd') LIKE '2018-01-%' 
    AND T.Username IS NOT NULL
GROUP BY   
    T.Username, FORMAT([UTCTimestamp], 'yyyy-MM-dd')
ORDER BY 
    FORMAT([UTCTimestamp], 'yyyy-MM-dd'), COUNT(clientIP) DESC

添加一个 ROW_NUMBER,将其包装在子查询中,然后对其进行过滤。

SELECT [DATE], Username, CountClientIP
FROM
(
    SELECT  
        FORMAT([UTCTimestamp],'yyyy-MM-dd') AS [DATE],
        T.Username,
        COUNT(DISTINCT clientIP) AS [CountClientIP], 
        ROW_NUMBER() OVER (PARTITION BY FORMAT([UTCTimestamp],'yyyy-MM-dd')
                           ORDER BY COUNT(DISTINCT clientIP) DESC) AS rn
    FROM [DBNAME].dbo.tablename O
    LEFT JOIN [DBNAME2]..[vwAD_tablename] T ON T.UserID = O.userID
    LEFT JOIN [DBNAME1]..[Event] E ON E.Code = O.Code  
    WHERE FORMAT([UTCTimestamp],'yyyy-MM-dd') LIKE '2018-01-%' 
      AND T.Username IS NOT NULL
    GROUP BY T.Username, FORMAT([UTCTimestamp],'yyyy-MM-dd')
) q
WHERE rn = 1
ORDER BY [DATE]