2009-12-06 1 views
0
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)

Выше запрос сделал с использованием datepart, через который я могу проверить количество людей, подписанных в 10:00 или выйдите из системы.

Например, над запросом возвращается 10 человек подписывают/выходят в 10 утра, но это не показывает мне людей, которые в настоящее время используют систему.

+3

ПОЖАЛУЙСТА, НЕ ПРОШЛО: P – Cocowalla

ответ

0

Найти все события входа/выхода из системы до 10:00 и отфильтровать те, что max (login)> max (logout).

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) 

Возможно, что-то подобное?