在SQL中每天从特定列获取最后一行

时间:2016-03-21 00:06:24

标签: mysql sql

我有一个名为logs的表,其中包含几列。

id |州|结果|时间戳

我需要所有状态'成功改变的行,但它们随机出现,有些日子他们不会,有些人会做两次。因此,如果每天有多个,我需要获得最后一个。

有人可以告诉我该怎么做吗?

谢谢!

2 个答案:

答案 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

你应该在时间戳字段上有索引。