繁体   English   中英

SQL 声明 - SELECT * 带 MAX()

[英]SQL Statement - SELECT * with MAX()

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

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

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

基本上, select 行,其中版本等于该equipid 的最大版本。

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

内部查询获取指定设备的最高ID,然后外部查询拉起该设备记录上数据的rest。

尝试

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;

这是一种方法

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM