SELECT
-- Subtract minute, second, millisecond part of date, effectively rounding to floor of the hour
-- For example '2017-03-17T14:31:25.567' becomes '2017-03-17T14:00:00.000'
DATEADD(
mi, -1 * (DATEPART(mi, tab.logindt) % 60),
DATEADD(
ss, -1 * (DATEPART(ss, tab.logindt)),
DATEADD(
ms, -1 * (DATEPART(ms, tab.logindt)),
tab.logindt
))) AS "Date",
COUNT(*) AS "Count"
FROM TableName tab
WHERE
tab.logindt BETWEEN 'Dec 1 2009 12:00 AM' AND 'Dec 2 2009 23:59 PM'
GROUP BY
DATEADD(
mi, -1 * (DATEPART(mi, tab.logindt) % 60),
DATEADD(
ss, -1 * (DATEPART(ss, tab.logindt)),
DATEADD(
ms, -1 * (DATEPART(ms, tab.logindt)),
tab.logindt
)))
我们有一个应用程序,其中有很多人登录,问题是我想查询通过该查询我可以计算在特定时间登录系统的人数说早上10点/ 11/12/14
上面的查询已经使用了datepart,通过它我可以检查在上午10点签名的人数或退出。
例如,上面的查询在上午10点返回10人签名/注销,但它不会向我显示当前正在使用系统的人。
答案 0 :(得分:0)
在上午10点之前查找所有登录/注销事件并过滤那些max(login)> MAX(注销)。
SELECT COUNT * FROM
(SELECT *
FROM Table
WHERE login < 10am //your date function here!
and logout < 10am ) a
GROUP BY a.USER
HAVING MAX(a.login) > MAX(a.logout)
也许是这样的东西?