如何为每个成员选择最新的输入?

use*_*177 5 mysql

假设我有一个MySQL表:

??????????????????????????????????
? time ? mid ? field_1 ? field_2 ?
??????????????????????????????????
?  100 ?   1 ?      32 ?      54 ?
?  100 ?   2 ?       0 ?      34 ?
?  100 ?   3 ?      44 ?      99 ?
?  200 ?   1 ?       0 ?      45 ?
?  200 ?   2 ?       0 ?      45 ?
?  200 ?   3 ?       4 ?      59 ?
?  200 ?   4 ?      45 ?      45 ?
??????????????????????????????????

time是UNIX时间戳.mid是会员ID.field_1由会员提供.field_2自动填充.

我希望为所有成员选择具有最近非零field_1的行.因此查询将导致:

??????????????????????????????????
? time ? mid ? field_1 ? field_2 ?
??????????????????????????????????
?  100 ?   1 ?      32 ?      54 ?
?  200 ?   3 ?       4 ?      59 ?
?  200 ?   4 ?      45 ?      45 ?
??????????????????????????????????

我提出的唯一解决方案似乎并不优雅:

SELECT *
FROM (
    SELECT *
    FROM t1
    WHERE field_1 > 0
    ORDER BY time DESC
) AS a
GROUP BY mid

有没有更好的办法?

lc.*_*lc. 1

SELECT a.*
FROM t1 AS a
INNER JOIN
(
    SELECT mid, MAX(time) AS maxTime
    FROM t1
    WHERE field_1 <> 0
    GROUP BY mid
) b ON a.mid = b.mid AND a.time = b.maxTime
Run Code Online (Sandbox Code Playgroud)

SQL小提琴