假设我有一个 MySQL 表:
╔══════╦═════╦═════════╦═════════╗ ║ 时间 ║ 中 ║ 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 会自动填充。
我希望为所有成员选择具有最新非零字段_1 的行。因此查询将导致:
╔══════╦═════╦═════════╦═════════╗ ║ 时间 ║ 中 ║ field_1 ║ field_2 ║ ╠══════╬═════╬═════════╬═════════╣ ║ 100 ║ 1 ║ 32 ║ 54 ║ ║ 200 ║ 3 ║ 4 ║ 59 ║ ║ 200 ║ 4 ║ 45 ║ 45 ║ ╚══════╩═════╩═════════╩═════════╝
我想出的唯一解决方案似乎不是很优雅:
选择 * 从 ( 选择 * 从 t1 WHERE field_1 > 0 按时间顺序排列 ) 作为一个 按中间分组
有没有更好的办法?