如果适用某些条件,则仅选择ID

时间:2016-03-16 07:42:11

标签: mysql if-statement

如果客户端状态在最新(!)时间戳上等于1(活动),我只想选择客户端ID;如果没有,比不显示它。

我能够获得客户端处于活动状态的相关最新时间戳,但这不是我需要的。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS()

SELECT * FROM YourTable t
WHERE status = 1
  AND NOT EXISTS(SELECT 1 FROM YourTable s
                 WHERE t.client_id = s.client_id
                   AND s.timestamp > t.timestamp)

当然,由于您的问题信息不足,所有这些名称都是猜测,因此请根据您的数据进行调整。

答案 1 :(得分:1)

根据clientId和日期列的降序给出行号 然后,

<强>查询

select t.ClientId, t.`status`, t.`timestamp` from
(
    select ClientId, `status`, `timestamp`, 
    (
        case ClientId when @curA 
        then @curRow := @curRow + 1 
        else @curRow := 1 and @curA := ClientId end 
    ) as rn 
    from your_table_name t, 
    (select @curRow := 0, @curA := '') r 
    order by ClientId, `timestamp` desc
)t
where t.rn = 1 and t.`status` = 1;

答案 2 :(得分:0)

您是否尝试获取相对于client_id或整个表的最新时间戳?

根据具体情况,我会评论/留下未注释的行:

SELECT *
FROM your_table t
WHERE status = 1
AND timestamp =
( SELECT MAX(t2.timestamp)
  FROM your_table t2
  WHERE t2.client_id = t.client_id //comment this line
);