SQL语句 - SELECT * with MAX()

时间:2011-07-22 21:11:04

标签: php sql select max

我有4列名为ID,EQUIPID,VERSION,DESCRIPTION。用户可以添加其他列,以便SQL语句需要是动态的。列ID是唯一的,永远不会重复; EQUIPID描述了一种设备,这意味着多个EQUIPID可以相同;和VERSION描述了相同EQUIPID条目之间的区别。

我如何查询SELECT *并只获得每个具有最大版本的EQUIPID中的一个?

4 个答案:

答案 0 :(得分:3)

  SELECT tn.*
    FROM table_name tn
   WHERE tn.version =
          (SELECT MAX(sq.version)
             FROM table_name sq
            WHERE sq.equipid = tn.equipid);

基本上,选择版本等于该equipid的最大版本的行。

答案 1 :(得分:2)

select *
from yourtable
where ID in (
   select max(ID)
   from
   yourtable
   where EQUIPID = xxx
);

内部查询获取指定设备的最高ID,然后外部查询将获取该设备记录中的其余数据。

答案 2 :(得分:1)

SELECT * FROM table
GROUP BY EquipID
HAVING max(Version)

另一种创建临时表然后从两个表

加入的方法
mysql> CREATE TABLE tmp
    -> SELECT name, MAX(Version) AS max_ver
    -> FROM tableName GROUP BY EquipID;
mysql> SELECT t.*
    -> FROM tableName t, tmp
    -> WHERE t.id = tmp.id

或使用自我加入

select *
from tableName tn
where (
   select count(*) from table t
   where t.equipId = tn.equipId and t.version > tn.version
) <= 2;

答案 3 :(得分:1)

这是一种方法

SELECT yt.* 
FROM   yourtable yt 
       INNER JOIN (SELECT equipid, 
                          Max(version) AS version 
                   FROM   yourtable) AS maxversion 
         ON yt.equipid = maxversion.equipid 
            AND yt.version = maxversion.version; 

但是根据您的数据库,您可以通过其他方式执行此操作。例如使用ROW_NUMBER()