假设我有一个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
有没有更好的办法?
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)