MySQL - 根据具有相同user_id的其他行的列值,按user_id选择行

时间:2014-03-02 02:12:20

标签: mysql sql

我有一个复杂的请求,所以我把它简化了,希望我能解释清楚。

我有一个订阅表:

ID   | Timestamp           | User Id | Status
-----+---------------------+---------+---------
1    | 2013-06-14 16:39:23 |    1    | inactive
2    | 2013-11-20 10:18:17 |    1    | active
3    | 2013-06-14 16:39:23 |    2    | inactive
4    | 2014-03-01 17:18:26 |    3    | active

我想查询此表以查找状态为inactive的订阅,以及 NOT 的用户是否还有active订阅。

例如,这应该返回订阅ID 3,但不会返回订阅ID 1 - 因为ID 1的用户具有active订阅(订阅ID 2)。

2 个答案:

答案 0 :(得分:1)

以下查询应该可以解决问题:

select a.id from
table as a
inner join
(
    select user_id, max(id)
    from table
    group by user_id
) as b
on (a.id=b.id and a.status='inactive')

答案 1 :(得分:0)

尝试以下操作,看看是否有效

SELECT *
FROM Table t
WHERE t.Status = 'inactive' 
    AND NOT EXISTS(SELECT 1 FROM Table t2 
                    WHERE t2.user_id = t.user_id 
                    AND t2.status <> 'inactive')