T-SQL查询 - GROUP BY问题

Pat*_*ick 1 sql t-sql sql-server

我在SQL Server中有一个表,包含两列,用于跟踪以特定间隔登录系统的用户数.第一列是Time15,它是四舍五入到最近的15分钟间隔(日期时间)的时间.第二列是UserCount,它是在15分钟间隔内登录系统的用户数.

我需要一个查询,它会显示每天登录的用户峰值数.因此,如果在2009年1月1日下午1点系统达到了100个用户的峰值,我需要输出看起来像:

1/1/09 - 100

1/2/09 - 94

1/3/09 - 98

等......

知道T-SQL将要实现的目标吗?谢谢!

Mik*_*ehr 5

试试这个:

SELECT YEAR(Time15), MONTH(Time15), DAY(Time15), MAX(UserCount)
FROM Table
GROUP BY YEAR(Time15), MONTH(Time15), DAY(Time15)
Run Code Online (Sandbox Code Playgroud)

我喜欢Russ的方法来摆脱时间部分 - 如果你有SQL Server 2005+,你可以使用这种方法来保持峰值发生的时间:

WITH cte AS 
(
SELECT Time15, UserCount, ROW_NUMBER() OVER (PARTITION BY DATEADD(dd, DATEDIFF(d, 0, Time15), 0) ORDER BY UserCount DESC) AS RowNumber
FROM <Table>
)
SELECT Time15, UserCount
FROM cte
WHERE RowNumber = 1
Run Code Online (Sandbox Code Playgroud)