如果客户端状态在最新(!)时间戳上等于1(活动),我只想选择客户端ID;如果没有,比不显示它。
我能够获得客户端处于活动状态的相关最新时间戳,但这不是我需要的。
有什么想法吗?
答案 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
);