简体   繁体   English

SQL - 查找两周或更长时间从未登录过的用户

[英]SQL - Find users who never logged in for two weeks or more

Date        UserID  
1/1/2013    Jo1234   
2/1/2013    Bob1234    
2/2/2013    Bob1234    
2/3/2013    Cal5678  
1/4/2013    Bob1234   
2/1/2013    Bob1234    
2/2/2013    Bob1234    
2/3/2013    Cal5678  

Hi I would like to find the users who didn't log in for two weeks or more嗨,我想找到两周或更长时间没有登录的用户

SELECT DISTINCT [UserID]  FROM UsersTable

I cant use WEEK() as I am using an older version of sql I appreciate your help我无法使用WEEK()因为我使用的是旧版本的 sql 感谢您的帮助

SELECT DISTINCT [UserID] FROM UsersTable WHERE DATEDIFF(DAY, myDateCol, getDate()) >= 14 SELECT DISTINCT [UserID] FROM UsersTable WHERE DATEDIFF(DAY, myDateCol, getDate()) >= 14

Basic date functions are easily found for SQL Server; SQL Server 的基本日期函数很容易找到; please check Google for date calculations if you need something more precise.如果您需要更精确的信息,请检查谷歌的日期计算。

https://docs.microsoft.com/en-us/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver15 https://docs.microsoft.com/en-us/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver15

Since you want to filter based on two weeks (14 days), you can use the following to filter the results out :由于您要基于两周(14 天)进行过滤,因此您可以使用以下方法将结果过滤掉:

DATEADD(DAY, -14, GETDATE()

Consider the following dataset :考虑以下数据集:

CREATE TABLE Test(LastDateOfLogin DATE, UserID  NVARCHAR(20))

INSERT INTO Test VALUES('11-Nov-2020', 'Jo1234')
INSERT INTO Test VALUES('01-Nov-2020', 'Bob1234')
INSERT INTO Test VALUES('02-Nov-2020', 'Bob1234')
INSERT INTO Test VALUES('03-Nov-2020', 'Cal5678')
INSERT INTO Test VALUES('03-Nov-2020', 'Bob1234')
INSERT INTO Test VALUES('12-Nov-2020', 'Bob1234')
INSERT INTO Test VALUES('15-Nov-2020', 'Bob1234')
INSERT INTO Test VALUES('05-Nov-2020', 'Cal5678')

The table will look as :该表将如下所示:

在此处输入图片说明

Write the query :编写查询:

SELECT      LastDateOfLogin, UserID
FROM        Test
WHERE       LastDateOfLogin <= DATEADD(DAY, - 14, GETDATE())

The result will be :结果将是:

在此处输入图片说明

Hope, this helps!!希望这可以帮助!!

To answer your part about WEEK(), you are correct.要回答您关于 WEEK() 的部分,您是对的。 No such thing exists.不存在这样的事情。 You have to use DATEPART().您必须使用 DATEPART()。

SELECT DATEPART(WW, GETDATE());

I think what you are looking for though is我认为你正在寻找的是

SELECT DISTINCT [UserID] 
FROM UsersTable
GROUP BY [UserID]
HAVING MAX(Date) < CAST(DATEADD(WEEK, -1, GETDATE()) AS DATE)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM