在下面的表格,我怎么得到公正的最新记录的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 次 |
最近记录: |