我对MySQL(和整个数据库)比较陌生,所以请耐心等待。我曾尝试在其他地方寻找问题的一部分以自己制定解决方案,但我想我没有足够的经验来做到这一点。
这就是问题所在:
假设我有一个这样的表:
key | account_id | status
1 | 1 | 0
2 | 1 | 1
3 | 2 | 0
4 | 1 | 0
5 | 2 | 1
6 | 1 | 1 <- match (last occurrence of 1, 1)
7 | 1 | 0 <- need to capture
8 | 2 | 2
9 | 1 | 2 <- need to capture
10 | 1 | 0 <- need to capture
我有多个帐户,这些帐户会不时更改其状态。我想捕获状态为上次激活(1)时特定帐户的所有状态更改。
该帐户过去可能一直处于活动状态,但可能当前未处于活动状态。因此,如果您查看上面的表,上次帐户1处于活动状态(1)的时间是第6行。我想捕获该点以后的所有状态更改,但不包括该行本身:
key | account_id | status
7 | 1 | 0
9 | 1 | 2
10 | 1 | 0
我有一种强烈的感觉,我需要使用groupby和一个子查询,但似乎无法提出解决方案。
答案 0 :(得分:1)
只要key
的值随时间增加,此查询将为您提供所需的结果。它会搜索account_id = 1
的{{1}}值大于key
的最后一个key
值的所有条目:
account_id = 1 AND status = 1
输出
SELECT *
FROM accounts
WHERE account_id = 1
AND `key` > (SELECT MAX(`key`)
FROM accounts
WHERE account_id = 1 AND status = 1)