Tsql 按时间片划分的T-SQL组
问题是:表有unix登录时间戳,我需要找到一段时间内的最大登录次数。假设a有一个30分钟的时间片。查找开始时间和30分钟的最大登录计数,其中时间戳介于上一个午夜和此午夜之间 我不知道如何编写查询。分组?截断隔断 欢迎对MS SQL 2008或2012提出任何建议 表x LoginUTC intTsql 按时间片划分的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
多谢各位 选择可能的重复项 这是一个开始
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。