2009-12-06 6 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 
))) 

Nous avons une application dans laquelle un certain nombre de personnes de connexion, le problème est que je veux faire une requête par laquelle je peux compter le nombre de personnes connecté à le système à un moment donné dit 10 heures/11/12/14.Besoin d'aide pour résoudre la requête (en utilisant datepart)

Ci-dessus la requête a été faite en utilisant datepart, à travers lequel je peux vérifier le nombre de personnes signées à 10 heures OU se déconnecter. Par exemple, la requête ci-dessus renvoie 10 personnes à 10 heures, mais elle ne montre pas les personnes qui utilisent actuellement le système.

+3

S'IL VOUS PLAÎT NE PAS SHOUT: P – Cocowalla

Répondre

0

Trouvez tous les événements de connexion/déconnexion avant 10h et filtrez ceux tels que 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) 

Quelque chose comme ça peut-être?