我有一个名为logs的表,由几列组成。
ID | 状态 | 结果 | 时间戳
我需要所有状态为"成功更改"的行,但它们是随机出现的,有些日子它们没有,有些则重复出现。因此,如果每天不止一个,我需要得到最后一个。
有人可以告诉我怎么做吗?
谢谢!
这里有一种方法:
select l.*
from logs l
where l.result = 'success-changed' and
l.timestamp = (select max(l2.timestamp)
from logs l2
where l2.result = 'success-changed' and
date(l2.timestamp) = date(l.timestamp)
);
这假定timestamp
存储为datetime
值。
也许您需要添加顺序依据和分组依据来选择...
select id , state , max(timestamp)
from logs
where result = 'success-changed'
group by id , state
order by 3 desc
如果您需要 id、上次时间戳的状态以及结果 ="成功更改"的每一天,也许这会更快:
select id, state, timestamp
from logs l
where result = 'success-changed'
and exists(
select date(timestamp)
from logs
where result = 'success-changed'
group by date(timestamp)
having max(timestamp) = l.timestamp)
order by 3 desc
您应该在时间戳字段上具有索引。