查找最大(Audit_Date)和日期不在范围内的用户

Finding user with max(Audit_Date) and date not in range

我正在处理一个 SQL 查询,其中用户的最大值 Audit_Date 不在一个范围内,因为他们已经很长时间没有使用该系统了。我这样试过:

SELECT DISTINCT 
UserID
,max(Audit_Date)
FROM   RV_USERS RV_USERS
INNER JOIN RV_AUDIT RV_AUDIT ON 
RV_USERS.UserID=RV_AUDIT.UserID
group BY RV_USERS.UserID

AND --it doesn't like the "and" here
not exists(
select *
FROM   RV_USERS RV_USERS
INNER JOIN RV_AUDIT RV_AUDIT ON  ON RV_USERS.UserID=RV_AUDIT.UserID
where 
Audit_Date not between '2019-05-29 00:00:00' and '10/29/2019' 
)

我尝试使用 ,但在这种情况下不起作用。我在关键字 'AND' 附近得到不正确的语法,就在不存在之前。我需要对此进行查看,所以我认为变量和临时表不可用。它将在 crystal 报告中使用并在中央管理控制台中安排。

**Update1:​​每个答案都试过这个: SELECT 不同 "RV_USERS"."UserID" ,"RV_AUDIT"."Audit_Date" 来自 "RV_USERS" "RV_USERS" 内连接 "RV_AUDIT" "RV_AUDIT" ON "RV_USERS"."UserID"="RV_AUDIT"."UserID"

分组 "RV_USERS"."UserID", "RV_AUDIT"."Audit_Date"

拥有 max("RV_AUDIT"."Audit_Date") < '2019-05-29 00:00:00'

和 "RV_USERS".UserID='me'

这个 returns 我的日期是五月份,尽管我从五月份就开始使用这个系统了。我通过删除最大日期部分来检查并查看我的日期到今天。

**更新 2:根据其他答案尝试过:

SELECT DISTINCT 
"RV_USERS"."UserID"
,max("RV_AUDIT"."Audit_Date")
FROM   "RV_USERS" "RV_USERS" 
INNER JOIN "RV_AUDIT" "RV_AUDIT" ON "RV_USERS"."UserID"="RV_AUDIT"."UserID"
WHERE  

not exists(
select *
FROM   "RV_USERS" u2 
INNER JOIN "RV_AUDIT" a2 ON u2."UserID"=a2."UserID"
where 
a2."Audit_Date" not between '2019-05-27 00:00:00' and '10/31/2019' 
)
group BY "RV_USERS"."UserID"

这不会返回任何内容,但我们知道有些经理没有使用过该系统。

**每个答案更新 3:

SELECT DISTINCT 
u."UserID"
,max(a."Audit_Date")
FROM   "RV_USERS" u 
INNER JOIN "RV_AUDIT" a ON u."UserID"=a."UserID"
WHERE  
u.UserID not in(

select u2.UserID

FROM   "RV_USERS" u2 
INNER JOIN "RV_AUDIT" a2 ON u2."UserID"=a2."UserID"
where 
a2."Audit_Date" between '2019-05-27 00:00:00' and '10/31/2019' 
)
group BY u."UserID"

and替换为where子句并将group by放在最后,使上述查询至少运行

我建议使用 having 子句:

SELECT UserID, max(Audit_Date)
FROM RV_USERS RV_USERS INNER JOIN
     RV_AUDIT RV_AUDIT 
     ON RV_USERS.UserID = RV_AUDIT.UserID
GROUP BY RV_USERS.UserID
HAVING max(Audit_Date) < '2019-05-29';

您的查询似乎比必要的复杂得多。

您的错误不止一个,这里是更正代码:

SELECT DISTINCT 
       RV_U.UserID
       , max(RV_U.Audit_Date)
FROM   RV_USERS RV_U
INNER JOIN RV_AUDIT RV_A ON RV_U.UserID=RV_A.UserID
WHERE
NOT EXISTS(
    SELECT *
    FROM   RV_USERS RV_USERS
    INNER JOIN RV_AUDIT RV_AUDIT ON RV_USERS.UserID=RV_AUDIT.UserID
    WHERE Audit_Date not between '2019-05-29 00:00:00' and '10/29/2019' 
)
GROUP BY RV_U.UserID;
  • 你的行 NNER JOIN RV_AUDIT RV_AUDIT ON ON RV_USERS.UserID=RV_AUDIT.UserIDON 两次。
  • GROUP BY应该走到最后
  • AND 应替换为 WHERE

尝试实施此更改。