T-SQL查询-按问题分组

T-SQL查询-按问题分组,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQL Server中有一个由两列组成的表,用于跟踪在特定时间间隔内登录到系统的用户数。第一列是Time15,它是四舍五入到最接近的15分钟间隔datetime的时间。第二列是UserCount,这是在15分钟的时间间隔内登录到系统的用户数 我需要一个查询,将显示我每天登录的用户数量峰值。因此,如果在2009年1月1日下午1点,系统达到100个用户的峰值,我需要如下输出: 2009年1月1日至100日 1/2/09-94 1/3/09-98 等等 你知道T-SQL将实现什么吗?谢谢 试试这个

我在SQL Server中有一个由两列组成的表,用于跟踪在特定时间间隔内登录到系统的用户数。第一列是Time15,它是四舍五入到最接近的15分钟间隔datetime的时间。第二列是UserCount,这是在15分钟的时间间隔内登录到系统的用户数

我需要一个查询,将显示我每天登录的用户数量峰值。因此,如果在2009年1月1日下午1点,系统达到100个用户的峰值,我需要如下输出:

2009年1月1日至100日

1/2/09-94

1/3/09-98

等等

你知道T-SQL将实现什么吗?谢谢

试试这个:

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
试试这个:

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

您基本上需要从Time15字段中删除时间部分,以获取日期。然后,这只是一个简单的例子,当您按日期分组时,可以获得最大用户数

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)

您基本上需要从Time15字段中删除时间部分,以获取日期。然后,这只是一个简单的例子,当您按日期分组时,可以获得最大用户数

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)

我只是把它转换成这样…似乎是最简单的


选择convertvarchar,Time15101作为da,maxUserCountFROM TABLE GROUP BY convertvarchar,Time15101,我只是这样转换它…似乎是最简单的


选择convertvarchar,Time15101作为da,maxUserCountFROM TABLE GROUP BY convertvarchar,Time15101

如果您想要峰值,那不应该是MAXUserCount而不是SUM吗?接受这个答案是因为可以保留时间。不是原始需求的一部分,但对我很有用。谢谢。如果你想要峰值,那不应该是MAXUserCount而不是SUM吗?接受这个答案是因为可以保留时间。不是原始需求的一部分,但对我很有用。谢谢