2013-02-05 5 views
0

J'essaie de suivre les données utilisateur pour savoir quand les utilisateurs se connectent à une application. Ce que j'essaie de tirer de ma requête (ci-dessous), c'est tous les utilisateurs qui ne se sont pas connectés depuis 30 jours ou plus. Cependant, il attire des utilisateurs qui se sont connectés récemment. Aidez-moi?Requête SQL pour tous les enregistrements au moins 30 jours

SELECT UserNM AS [UserID], MAX(EventDT) AS [Last Log-in Date] 
FROM dbo.USREventLog 
WHERE ABS(DATEDIFF([day], EventDT, GETDATE())) > 30 

    AND (UserNM NOT LIKE 'user1') AND (UserNM NOT LIKE 'user2') 
    AND (UserNM NOT LIKE 'user3') AND (UserNM NOT LIKE 'user4') 

GROUP BY UserNM 

BTW, j'utilise leur dossier le plus récent de l'activité que leur dernier journal à ce jour et j'ai une petite liste des utilisateurs qui absolument être pas inclus dans les résultats.

Répondre

1

Essayez ceci:

SELECT UserNM AS [UserID], MAX(EventDT) AS [Last Log-in Date] 
FROM dbo.USREventLog 
WHERE EventDT < GETDATE() - 30 

    AND (UserNM NOT LIKE 'user1') AND (UserNM NOT LIKE 'user2') 
    AND (UserNM NOT LIKE 'user3') AND (UserNM NOT LIKE 'user4') 

GROUP BY UserNM, EventDT 
+0

Msg 147, niveau 15, état 1, ligne 3 Un agrégat peut ne pas apparaître dans la clause WHERE à moins qu'il soit dans une sous-requête contenue dans une clause HAVING ou une liste de sélection, et la colonne étant agrégé est un référence externe. –

+0

J'ai mis à jour la réponse –

0

J'ai trouvé une autre solution ailleurs. La requête est collée ci-dessous.

SELECT UserID, [Last Login Date] from (
    SELECT UserNM AS [UserID], MAX(EventDT) AS [Last Login Date] 
    FROM dbo.TSEventLog 
    WHERE (UserNM NOT LIKE 'user 1') AND (UserNM NOT LIKE 'user2') 
    GROUP BY UserNM) x 
WHERE ABS(DATEDIFF(day, [Last Login Date], GETDATE())) > 30 
ORDER BY [UserID] ASC 
Questions connexes