查找最大(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.UserID
有 ON
两次。
GROUP BY
应该走到最后
AND
应替换为 WHERE
尝试实施此更改。
我正在处理一个 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'
)
我尝试使用
**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.UserID
有ON
两次。 GROUP BY
应该走到最后AND
应替换为WHERE
尝试实施此更改。