mysql通过timestamp获取最新记录而不使用子查询

M2s*_*2sh 1 mysql sql timestamp greatest-n-per-group

在这张表中我有四列

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
Run Code Online (Sandbox Code Playgroud)

我想通过最后一个字段获取最新记录(add_time)

结果必须是这样的

id   state_id   state        add_time
3       14         2        1385461144
4       12         5        1385461264
5       10         2        1385461264
Run Code Online (Sandbox Code Playgroud)

我发现这个问题获取最新时间戳mysql的记录 ,它使用两个选择查询(子查询).但我不想使用子查询.

有没有其他方法来获取最新记录?

Mos*_*cho 5

有两种方法可以获得您正在寻找的结果.

左连接解决方​​案:

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
Run Code Online (Sandbox Code Playgroud)

小提琴这里.

子查询解决方案:

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
Run Code Online (Sandbox Code Playgroud)

小提琴这里.

两者都会输出:

| ID | STATE_ID | STATE |   ADD_TIME |
|----|----------|-------|------------|
|  3 |       14 |     2 | 1385461144 |
|  4 |       12 |     5 | 1385461264 |
|  5 |       10 |     2 | 1385461264 |
Run Code Online (Sandbox Code Playgroud)