T-SQL查询 - GROUP BY问题

时间:2009-08-11 19:56:12

标签: sql sql-server tsql

我在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将要实现的目标是什么?谢谢!

3 个答案:

答案 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)