在下面的表格,我怎么得到公正的最新记录的id=1基础上,登入列,而不是所有3条记录?
+----+---------------------+---------+
| id | signin | signout |
+----+---------------------+---------+
| 1 | 2011-12-12 09:27:24 | NULL |
| 1 | 2011-12-13 09:27:31 | NULL |
| 1 | 2011-12-14 09:27:34 | NULL |
| 2 | 2011-12-14 09:28:21 | NULL |
+----+---------------------+---------+
Run Code Online (Sandbox Code Playgroud)
Mic*_*ski 70
使用MAX(signin)按ID分组的聚合.这将列出signin每个最新的id.
SELECT
id,
MAX(signin) AS most_recent_signin
FROM tbl
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
要获取整个单个记录,请INNER JOIN针对仅返回MAX(signin)每个id 的子查询执行.
SELECT
tbl.id,
signin,
signout
FROM tbl
INNER JOIN (
SELECT id, MAX(signin) AS maxsign FROM tbl GROUP BY id
) ms ON tbl.id = ms.id AND signin = maxsign
WHERE tbl.id=1
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 70
SELECT *
FROM tbl
WHERE id = 1
ORDER BY signin DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
最明显的指标是上(id),还是多列索引上(id, signin DESC).
在@ xQbert的答案的基础上,您可以避免使用子查询并使其足够通用,以便按任何ID进行过滤
SELECT id, signin, signout
FROM dTable
INNER JOIN(
SELECT id, MAX(signin) AS signin
FROM dTable
GROUP BY id
) AS t1 USING(id, signin)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119419 次 |
| 最近记录: |