我有一张下一张桌子(称它为alarm_issues)。
田园诗| idaction | dt ---- | -------- | ------------------- 5 | 6 | 2016-09-23 15:02:50 5 | 7 | 2016-09-23 16:00:00 5151 | 7 | 2016-09-01 00:00:00 5151 | 6 | 2016-12-01 15:35:34
但是我需要从上一个表中获取下一个表:
田园诗| idaction | dt ---- | -------- | ------------------- 5 | 7 | 2016-09-23 16:00:00 5151 | 6 | 2016-12-01 15:35:34
这意味着我想要“对于每个通过idal值组成的行组,我只想通过保留tyde idaction值来获取最新行”。我已经尝试了一些方法,但从未成功,因为它的idaction值会丢失并与其他值混合(当您按idaction字段分组时)。
这是一种方法:
select ai.*
from alarm_issues ai
where ai.dt = (select max(ai2.dt)
from alarm_issues ai2
where ai2.idal = ai.idal
);
对于每个idal
具有最大值的行,这将使用相关的子查询来选择行dt
。
这是另一种方法:
select ai.*
from (select ai.*,
(@rn := if(@i = @idal, @rn + 1,
if(@i := @idal, 1, 1)
)
) as rn
from alarm_issues ai cross join
(select @rn := 0, @i = 0) params
order by idal, dt desc
) ai
where rn = 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句