首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取子查询中不存在的所有记录

获取子查询中不存在的所有记录
EN

Stack Overflow用户
提问于 2016-03-31 13:25:04
回答 2查看 53关注 0票数 0

我试图返回子查询中没有的所有记录(其中应该有很多),但没有得到任何结果。

我想要LastAccesstime (日期时间)没有访问时间的所有记录,即GETDATE() 24小时内的访问时间。这有意义吗?我也尝试了WHERE NOT IN,得到了同样的结果。

代码语言:javascript
复制
SELECT Firstname, Surname, LastAccesstime 
from Users
WHERE NOT EXISTS (
SELECT Firstname, Surname, LastAccesstime from Users 
WHERE (LastAccesstime) >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
AND (LastAccesstime) < DATEADD(day, DATEDIFF(day, 0, GETDATE())+1, 0)
) 

该表包含许多其他字段,包括一个UserID,但这对我的问题并不重要,因为一旦能够返回正确的结果集,我应该能够完成我需要做的事情。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-31 13:46:39

理查的回答绝对是正确的。但是,datediff()不是正确使用的函数。它计算两个日期/时间值之间的边界数。因此,"2016-01-01 23:59“与"2016-01-02 00:01”相隔一天(因为午夜的界线)。

在Server中,最好在日期上使用直接比较:

代码语言:javascript
复制
SELECT u.*
FROM users u
WHERE u.lastaccesstime < DATEADD(day, -1, GETDATE());

这也有一个优点,即它可以利用lastaccesstime上的索引。

注意:

您的查询表明您不希望包含GETDATE()的时间组件。如果是这样,只需强制转换为date数据类型:

代码语言:javascript
复制
SELECT u.*
FROM users u
WHERE u.lastaccesstime < DATEADD(day, -1, CAST(GETDATE() as DATE));
票数 1
EN

Stack Overflow用户

发布于 2016-03-31 13:31:44

假设最后的访问时间总是过去的话

代码语言:javascript
复制
SELECT * FROM Users WHERE DATEDIFF(HOUR, ISNULL(lastaccesstime, GETDATE() - 2), GETDATE()) > 24
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36334797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档