【问题标题】:SQL Query for all Records at Least 30 days old至少 30 天前的所有记录的 SQL 查询
【发布时间】:2013-02-05 18:28:52
【问题描述】:

我正在尝试跟踪用户登录应用程序时的用户数据。我试图从我的查询(如下)中提取的是过去 30 天或更长时间未登录的所有用户。但是,它正在吸引最近登录的用户。帮忙?

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

顺便说一句,我使用他们最近的活动记录作为他们的最后一次登录日期,并且我有一小部分绝对不应该包含在结果中的用户。

【问题讨论】:

    标签: sql-server-2008 datediff teamsite interwoven


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • Msg 147, Level 15, State 1, Line 3 聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且正在聚合的列是外部参考。
    【解决方案2】:

    我在别处找到了另一种解决方案。查询粘贴在下方。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      相关资源
      最近更新 更多