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]
以下查询 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]