在mysql 3.23上选择每个ID的最大值

时间:2013-04-17 17:04:12

标签: mysql in-subquery

整个问题是由于IN子句中的子查询似乎不适用于mysql 3.23。

这是table1的表结构:

|**idTable1**|**strDescription**|
|1           |blablabla         |
|2           |blablabla         |

这是表2:

|**idTable2**|**idTable1**|**intVersion**|
|1           |1           |1             |
|2           |1           |8             |
|3           |2           |2             |
|4           |2           |3             |

我希望实现的目标:

仅加入两个表以获取描述,但我只希望每行的1条记录具有如下最大版本:

|**idTable1**|**strDescription**|**idTable2**|**idTable1**|**intVersion**|
|1           |blablabla         |2           |1           |8             |
|2           |blablabla         |4           |2           |3             |

以下是我提出的建议:

SELECT table1.idTable1, strDescription, intVersion FROM table1 
INNER JOIN table2 ON table1.idTable1 = table2.idTable1 
WHERE (table1.idTable1, intVersion)
IN (SELECT idTable1, MAX(intVersion) FROM table2 GROUP BY idTable1)

我已经在2个不同版本的mysql上测试了这个查询。我需要这个工作的是3.23,这个查询工作的是5.5。

有没有办法在3.23上实现这个目标?

2 个答案:

答案 0 :(得分:0)

我无法测试此查询,但您可以尝试用JOIN替换IN子句:

SELECT
  table1.idTable1, table1.strDescription, table2.intVersion
FROM
  table1 INNER JOIN table2
  ON table1.idTable1 = table2.idTable1 INNER JOIN
  (SELECT idTable1, MAX(intVersion) maxVersion FROM table2 GROUP BY idTable1) mx
  ON table1.idTable1=mx.idTable1 AND table2.intVersion=mx.maxVersion

答案 1 :(得分:0)

也许使用连接它会工作(未经测试我无法访问3.23。) 理论:从IDtable1中获取表2中的max intVersions然后将其与结果相结合,这将过滤掉由于连接标准而导致的非最大值。

Select T1.IDTable1, T1.strDescription, T2.IDtable2, T2.idTable1, T2.intVersion
FROM Table1 T1 
INNER JOIN table2 T2 on T1.idTable1=T2.IDtable1
INNER JOIN table3 T3 on T3.idtable1 = T1.IDtable1 and T3.Intversion = t2.intVersion
(Select max(intVersion) intVersion, idtable2, idtable1 from table2 group by IDtable1) T3
GROUP BY IDtable1, strDescription, IDtable2, IdTable1