[英]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.