在下面的表格,我怎么得到公正的最新记录的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    |
+----+---------------------+---------+
Mic*_*ski 70
使用MAX(signin)按ID分组的聚合.这将列出signin每个最新的id.
SELECT 
 id, 
 MAX(signin) AS most_recent_signin
FROM tbl
GROUP BY id
要获取整个单个记录,请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
Erw*_*ter 70
SELECT *
FROM   tbl
WHERE  id = 1
ORDER  BY signin DESC
LIMIT  1;
最明显的指标是上(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)
| 归档时间: | 
 | 
| 查看次数: | 119419 次 | 
| 最近记录: |