我有2张桌子。
用户 - 每位用户拥有1行,其中包含以下列:
这显示了上次有人在建筑物的某处使用他们的钥匙。
事件 - 每个用户有多行,使用以下列记录每个事件:
这显示了某人使用其密钥的每个实例。 EventTypeID为70表示某人进入建筑物或“进入”时。
我正在尝试进行查询,以显示正在使用其密钥但未使用其密钥在某一天注册其入口的人。
对于已正确完成此操作的用户,情况如下:
但我需要的是一份不遵守建筑规则的人员名单。
感谢您提前提供任何帮助。
答案 0 :(得分:1)
您需要加入表格并获取在活动表格中没有符合规则的记录的用户ID
SELECT Users.userID
FROM Users
LEFT JOIN Events ON Users.userID = Events.UserID
AND Events.EventTypeID = 70
AND Events.EventTime >= CONVERT(DATE, GETDATE())
WHERE EventID IS NULL
AND Users.LastAccessTime >= CONVERT(DATE, GETDATE())
答案 1 :(得分:1)
您的问题建议<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.1.60/inputmask/jquery.inputmask.js"></script>
<td>
<input value="A-45" id="piash">
</td>
或NOT EXISTS
。我认为这是你想要的逻辑:
Users.LastAccessTime&gt; '2017-02-28'(又名今天的日期) 最近的Events.EventTypeID = 70的情况也将具有Events.EventTime&gt; '2017-02-28'在同一行
NOT IN
这会返回今天进入但今天没有事件70的人。
答案 2 :(得分:0)
如果我理解你的问题,我认为你正在寻找这个问题:
select *
from Users as u,Event as e
where u.UserID=e.UserID and
(Users.LastAccessTime < CONVERT (date, GETDATE()) Or
Events.EventTypeID <> 70 or
Events.EventTime < CONVERT (date, GETDATE()));
我用来加入两个表的第一个条件。
和我使用的其他条件相反,它们之间应该发生OR
。因此,如果有一个用户不遵守一个或多个条件,他将被查询选中。
答案 3 :(得分:0)
这是你想要的吗?
SELECT U.USERID FROM USERS U
LEFT JOIN EVENTS E
ON
U.USERID=E.USERID
WHERE (E.USERID IS NULL OR U.LastAccessTime <> '2017-02-28' OR E.EventTypeID <>70 OR E.EventTime <> '2017-02-28') --if any of the above condition is Violated, their ID will be dispalyed in the select clause