我有4列名为ID,EQUIPID,VERSION,DESCRIPTION。用户可以添加其他列,以便SQL语句需要是动态的。列ID是唯一的,永远不会重复; EQUIPID描述了一种设备,这意味着多个EQUIPID可以相同;和VERSION描述了相同EQUIPID条目之间的区别。
我如何查询SELECT *并只获得每个具有最大版本的EQUIPID中的一个?
答案 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()