在这张表中我有四列
id state_id state add_time 1 10 1 1385461144 2 12 3 1385461144 3 14 2 1385461144 4 12 5 1385461264 5 10 2 1385461264
我想通过最后一个字段获取最新记录(add_time)
结果必须是这样的
id state_id state add_time 3 14 2 1385461144 4 12 5 1385461264 5 10 2 1385461264
我发现这个问题获取最新时间戳mysql的记录 ,它使用两个选择查询(子查询).但我不想使用子查询.
有没有其他方法来获取最新记录?
有两种方法可以获得您正在寻找的结果.
左连接解决方案:
SELECT t1.* FROM t t1 LEFT JOIN t t2 ON t1.state_id = t2.state_id AND t1.add_time < t2.add_time WHERE t2.add_time IS NULL
小提琴这里.
子查询解决方案:
SELECT t1.* FROM t t1 JOIN ( SELECT state_id, max(add_time) add_time FROM t GROUP BY state_id ) t2 ON t1.state_id = t2.state_id AND t1.add_time = t2.add_time
小提琴这里.
两者都会输出:
| ID | STATE_ID | STATE | ADD_TIME | |----|----------|-------|------------| | 3 | 14 | 2 | 1385461144 | | 4 | 12 | 5 | 1385461264 | | 5 | 10 | 2 | 1385461264 |