我有一个名为logs的表,其中包含几列。
id |州|结果|时间戳
我需要所有状态'成功改变的行,但它们随机出现,有些日子他们不会,有些人会做两次。因此,如果每天有多个,我需要获得最后一个。
有人可以告诉我该怎么做吗?
谢谢!
答案 0 :(得分:2)
这是一种方法:
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
值。
答案 1 :(得分:1)
也许您需要添加order by和group by来选择...
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
你应该在时间戳字段上有索引。