请考虑以下表格:
用户名:
UserId Name LastName
--------------------------------
User1 Name1 LName1
User2 Name2 LName2
User3 Name3 LName3
User4 Name4 LName4
和用户登录日志:
UserId LogDate Status
--------------------------------
User1 2022-01-01 1 <--For Successful Login
User1 2022-01-02 0 <--For UnSuccessful Login
User2 2022-01-02 1
User4 2022-02-02 1
User4 2022-03-02 0
User4 2022-05-02 1
User4 2022-05-10 0
User5 2022-05-10 0
不,我想找到那些在特定时间段内(例如上个月1天)没有登录的用户。从另一个Angular 来看,我不想找到那些在特定时间段内至少有一次Successful
登录的用户。
我编写了一些查询,但无法检查至少包含一个Successful
登录日志的排除记录。这是Linq
查询的SQL
版本:
select *
from Users aa left join Login_Log bb on aa.UserId = bb.UserId
where (bb.LogDate >= DATEADD(month, -1, getdate()) and bb.LogDate <= getdate()) and bb.Status is null
3条答案
按热度按时间eh57zj3b1#
LogedInUsers CTE包含至少有一次成功登录的用户。则最终结果为不在CTE中的用户:
qhhrdooz2#
我不希望在特定持续时间内至少有一次成功登录的用户登录。
要求给予在startPeriod和endPeriod之间(含)的时间段内未成功登录的所有用户。
首先,我们获取在此期间至少成功登录一次的所有用户的UserId
换句话说:从所有登录尝试中,仅保留该期间内的成功尝试。从剩余的用户登录中选择用户ID,并删除重复项。
如果userId是引用类型,则不能在
Distinct
中使用默认的相等比较器,必须提供按值比较的引用类型。现在删除在以下时间段内成功登录的所有用户:
换句话说:要获取在此期间未成功登录的所有用户,请从所有用户开始,并仅保留在此期间成功登录的用户的UserId集合中UserId为NOT的用户。
当然,你可以用一个很大的LINQ语句来写,这不会提高效率,我确信这会降低可读性。
简单的问候!
cgh8pdjw3#
您可以在“使用者”表格中选取其ID在上个月没有成功登入的使用者。以下是
linq
的解决方案:该解决方案采用以下定义:
users
和userLoginLogs
分别是User
和UserLoginLog
的列表。例如,根据问题中的示例数据: