MySQL-在列中最后一次出现特定值之后,选择所有符合条件的行

时间:2019-08-14 03:09:08

标签: mysql

我对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和一个子查询,但似乎无法提出解决方案。

1 个答案:

答案 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)

Demo on dbfiddle