Tsql 按时间片划分的T-SQL组

Tsql 按时间片划分的T-SQL组,tsql,group-by,Tsql,Group By,问题是:表有unix登录时间戳,我需要找到一段时间内的最大登录次数。假设a有一个30分钟的时间片。查找开始时间和30分钟的最大登录计数,其中时间戳介于上一个午夜和此午夜之间 我不知道如何编写查询。分组?截断隔断 欢迎对MS SQL 2008或2012提出任何建议 表x LoginUTC int 多谢各位 选择可能的重复项 这是一个开始 select yy, mm, dd, hh, count(*) as ccount from table group by yy, mm, dd, hh

问题是:表有unix登录时间戳,我需要找到一段时间内的最大登录次数。假设a有一个30分钟的时间片。查找开始时间和30分钟的最大登录计数,其中时间戳介于上一个午夜和此午夜之间

我不知道如何编写查询。分组?截断隔断 欢迎对MS SQL 2008或2012提出任何建议

表x LoginUTC int


多谢各位

选择可能的重复项

这是一个开始

select yy, mm, dd, hh, count(*) as ccount
  from table 
 group by yy, mm, dd, hh 
 order by count(*) desc

因此,最后我编写了一个查询,向我展示了他们是如何在3个时间段内登录的,但如果需要,我们可以在更多时间段上节省时间:

DECLARE @dtz AS VARCHAR(30);
SET @dtz = '1969-12-31 18:00:00';
WITH Logins_CTE (
yy,
mm,
dd,
hh,
ur
)
AS (
SELECT year(dateadd(ss, login_time, @dtz)) AS yy,
  month(dateadd(ss, login_time, @dtz)) AS mm,
  day(dateadd(ss, login_time, @dtz)) AS dd,
  CASE 
   WHEN (datepart(hour, dateadd(ss, login_time, @dtz)) < 7)
    THEN 1
   WHEN (
     datepart(hour, dateadd(ss, login_time, @dtz)) > 6
     AND datepart(hour, dateadd(ss, login_time, @dtz)) < 18
     )
    THEN 2
   WHEN (datepart(hour, dateadd(ss, login_time, @dtz)) > 17)
    THEN 3
   ELSE 4
   END AS hh,
  userid AS ur
FROM login_log WITH (NOLOCK)
WHERE login_time BETWEEN datediff(ss, '1970-01-01', '2015-11-15')
   AND datediff(ss, '1970-01-01', '2015-12-20')
GROUP BY userid, login_time
)
SELECT yy,
mm,
dd,
hh,
count(DISTINCT ur) AS cc
FROM Logins_CTE
GROUP BY yy,
mm,
dd,
hh
ORDER BY cc DESC

可能重复的,取上面链接的问题的已接受答案,并将最后一行改为除以30。