我在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将要实现的目标是什么?谢谢!
答案 0 :(得分:5)
试试这个:
SELECT YEAR(Time15), MONTH(Time15), DAY(Time15), MAX(UserCount)
FROM Table
GROUP BY YEAR(Time15), MONTH(Time15), DAY(Time15)
我喜欢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
答案 1 :(得分:2)
您基本上需要从Time15字段中删除时间部分才能获取日期。然后,只是在按日期分组时获取Maximum UserCount的简单情况。
SELECT
DATEADD(dd, DATEDIFF(d, 0, Time15), 0) As [Date],
MAX(UserCount) As [Maximum Users]
FROM
Table
GROUP BY
DATEADD(dd, DATEDIFF(d, 0, Time15), 0)
答案 2 :(得分:1)
我只是这样转换它......似乎是最简单的......
SELECT convert(varchar,Time15,101)as da,max(UserCount)FROM TABLE GROUP BY convert(varchar,Time15,101)