我有一张类似于以下内容的表格:
+--------+----------+--------+--------+
| itemID | actionID | date | userID |
+--------+----------+--------+--------+
| 3 | a | 20-Apr | alice |
| 4 | a | 1-Jun | bob |
| 1 | b | 2-Jun | sam |
| 5 | c | 28-May | sally |
| 4 | c | 9-Apr | sally |
| 3 | b | 24-Apr | bob |
| 6 | b | 29-Apr | bob |
| 7 | a | 15-May | alice |
+--------+----------+--------+--------+
场景是这样的:
我需要知道UserID X
在actionID b
之后itemID Y
是否已经{/ 1}} 上一次用户actionID a
上itemId Y
actionID a
1}}。
在非抽象中,这是一个密码管理器。
有些用户需要在itemId Y
date Z
修改密码userID A
,我需要知道其他用户actionId b
在修改后是否已查看date Z
{{1}}。
此外,如果用户修改了密码,我需要假设他们也在查看密码。
答案 0 :(得分:2)
试试这个:
select *
from myTable t1
where userId = X and actionId = b and itemId = y
and t1.date > (select max(date) from myTable t2 where actionId = a and itemId = Y)
您可能希望在没有人对项目Y执行操作时处理此案例。现在,如果还没有人做过那个动作,它将不会返回任何内容。