从相关表中获取每组的最大行数

时间:2012-10-18 04:23:10

标签: mysql select join

这是我第一次在这里提问。这对学习很有帮助。

我正在尝试选择一个表,只获取另一个表中特定组的最大值。最好的答案之一是非常接近但不完全存在这一个(SQL Select only rows with Max Value on a Column),但它只涉及一个表。我发现其他一些人有多个表,但不确定如何使用它。

我有一张表(简化)

prodID, quantity, mach, etc

然后我有一张表

prodStatusID, prodID, userID, subStatusID

具有子状态名称的最后一个表

subStatusID, subStatusName

我正在尝试获取包含所有第一个表和第二个表的表,但只包含具有最大状态编号的行并包含正确的状态名称。
我现在的另一个问题可能并不重要,但在一两年内,这件事开始真正填满的是表现。我不知道在select中有选择但是如果我试图返回所有制作,那么它将对每个制作进行查询。

更清楚。在第二个表prodStatus中,可能有2行,prodID为4,但第一个的subStatusID为1,第二个为2。userID将不同。我想要回来的只是第二行,因为它具有最高的状态编号,我需要与该行关联的userID和statusName。

我一直在谷歌搜索2天才得到这个答案,我看到1关于拍卖,但即使在研究之后我也完全不了解它。

1 个答案:

答案 0 :(得分:1)

您需要为每个subStatusID创建一个子查询,其最大值为prodID

SELECT  a.*,     -- select only columns that you want to show
        c.*,     -- asterisks means all columns
        d.*
FROM    table1 a
        INNER JOIN
        (
            SELECT prodID, max(subStatusID) maxID
            FROM table2
            GROUP BY prodID
        ) b ON a.prodID = b.prodID 
        INNER JOIN  table2 c
            ON b.prodID = c.prodID AND
                b.maxID = c.subStatusID
        INNER JOIN table3 d
            ON c.subStatusID = d.subStatusID