MySql Select Distinct 有两个表和时间戳

Posted

技术标签:

【中文标题】MySql Select Distinct 有两个表和时间戳【英文标题】:MySql Select Destinct with two tables and by Timestamp 【发布时间】:2011-08-01 09:16:29 【问题描述】:

我想按时间戳和 UnitID 选择信息。这是两张表:

表信息:

 ID | UnitID |       Time            | Info   
 -----------------------------------------------
 1  |  101   |  2011-07-20 08:22:02  |  info 101
 2  |  102   |  2011-07-21 08:22:02  |  info 102
 3  |  103   |  2011-07-22 08:22:02  |  info 103
 4  |  104   |  2011-07-23 08:22:02  |  info 104
 5  |  104   |  2011-07-25 08:22:02  |  info 104
 6  |  102   |  2011-07-26 08:22:02  |  info 102

我想要的结果是每个 UnitID 和此 UnitID 的最新时间(时间戳)为:

 ID | UnitID |       Time             |  Info   
 ------------------------------------------------
 1  |  101   |   2011-07-20 08:22:02  |  info 101
 3  |  103   |   2011-07-22 08:22:02  |  info 103
 5  |  104   |   2011-07-25 08:22:02  |  info 104
 6  |  102   |   2011-07-26 08:22:02  |  info 102

如何进行此查询?

【问题讨论】:

请不要让格式变得更糟,user872497。回滚到 Harry Joy 的版本。另外,不要编辑它thanks and greetings。 【参考方案1】:
SELECT t1.ID, t1.UnitID, t2.MaxTime, t1.Info
FROM Info t1
INNER JOIN (SELECT UnitID, MAX(Time) As MaxTime 
            FROM Info
            GROUP BY UnitID) AS t2
ON (t1.UnitD = t2.UnitID AND t1.Time = t2.MaxTime)

【讨论】:

【参考方案2】:

试试这个 -

SELECT t1.* FROM table1 t1
JOIN (
  SELECT UnitID, MAX(Time) maxtime FROM table1 GROUP BY UnitID
) t2
ON t1.UnitID = t2.UnitID AND t1.Time = t2.maxtime;

用实际的表名更改“table1”。

【讨论】:

感谢所有快速回答!让它与 cularis 一起使用!【参考方案3】:

也许是这个?

SELECT * FROM Info GROUP BY UnitID HAVING Time = MAX(Time);

【讨论】:

以上是关于MySql Select Distinct 有两个表和时间戳的主要内容,如果未能解决你的问题,请参考以下文章

SQL 给一个表两个字段进行去重

mysql数据库基础

mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留

MYSQL 查询慢 SELECT DISTINCT

MYSQL UNION DISTINCT

MySQL 联合查询