在 sql asp.net 中获取过去 30 天未登录的用户

Posted

技术标签:

【中文标题】在 sql asp.net 中获取过去 30 天未登录的用户【英文标题】:get user who not login from last 30 days in sql asp.net 【发布时间】:2019-01-14 16:42:49 【问题描述】:

我想尝试获取过去 30 天内未登录的记录。 我试过了,我也得到了记录,但是, 该记录显示在 30 天之前登录的数据库中。 但我想显示,谁没有从当前日期的最近 30 天内登录,我可以禁用它们。

我试试下面的sql查询

select distinct CmsUserLogTime.UserId  
from CmsUserLogTime 
right join CmsUser on CmsUserLogTime.UserId = CmsUser.Id
where CmsUserLogTime.LoginLogoutTime <= DateAdd(Day, -30, GetDate()) 
order by 1 asc

我只想比较从当前日期到最近 30 天,我可以得到记录。

谢谢。

【问题讨论】:

mysql sql server. 你似乎在这个问题上自相矛盾。您想要 30 天或更长时间没有登录/注销活动的用户,还是想要其他东西? 小心....按顺序排列有很多挑战。 sqlblog.org/2009/10/06/bad-habits-to-kick-order-by-ordinal 【参考方案1】:

在 WHERE 子句中使用 DATEADD:

...

WHERE CmsUserLogTime.LoginLogoutTime < DATEADD(day, -30, GETDATE())

您也可以使用缩写 d 或 dd 代替 day。

【讨论】:

这也将返回已经登录的用户,比如说,今天我不认为这是有意的。另外,我不会使用速记日期。看看这个博客:sqlblog.org/2011/09/20/… 感谢先生的博客【参考方案2】:

使用NOT IN

select 
    CmsUserLogTime.UserId  
from CmsUserLogTime 
inner join CmsUser on CmsUserLogTime.UserId = CmsUser.Id
where CmsUserLogTime.UserId in (select UserID from CmsUserLogTime group by UserID having max(LoginLogoutTime) <= dateadd(day,-30,getdate()))

注意,由于您没有返回 CmsUser 表中的列,因此我认为没有必要将 JOIN 留给它,但如果您确实需要该表中的列,请保留它。

【讨论】:

你的理解力非常强+1。 哈哈谢谢@TimBiegeleisen,这是从您和其他大师那里阅读的答案 非常感谢您为我花费宝贵的时间@scsimon 它再次为我工作,谢谢!。

以上是关于在 sql asp.net 中获取过去 30 天未登录的用户的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 网站在 30 分钟后超时

ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?

从 sql 数据源获取数据到 asp.net 控件中

如何在 asp.net webform 中获取 js POST?

在 asp.net 中获取事务中的有效行

在 Asp.net Rowcommand 事件中获取行索引