【问题标题】:Selecting the maximum value for each ID on mysql 3.23在 mysql 3.23 上为每个 ID 选择最大值
【发布时间】:2013-04-17 17:04:12
【问题描述】:

整个问题是由于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 上实现这一点?

【问题讨论】:

    标签: mysql in-subquery


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      也许使用加入它会起作用(未经测试,我无权访问 3.23。) 理论:从按 IDtable1 分组的 Table2 中获取最大 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
      

      【讨论】:

        猜你喜欢
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        • 2021-09-28
        • 1970-01-01
        相关资源
        最近更新 更多