2009-12-06 4 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를 사용하여 작성되었습니다.이를 통해 오전 10시에 서명 한 사람 수를 확인하거나 로그 아웃 할 수 있습니다.

예를 들어, 위의 쿼리는 오전 10시에 10 명이 서명/서명을 반환하지만 현재 시스템을 사용하는 사람들은 표시하지 않습니다.

+3

제발 내버려 두지 마세요. P – Cocowalla

답변

0

오전 10시 이전에 모든 로그인/로그 아웃 이벤트를 찾아 최대 (로그인)> 최대 (로그 아웃) 인 필터를 필터링하십시오.

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) 

어쩌면 그럴 것 같은가요?

관련 문제