1

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

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

我有一张桌子(简化)

prodID, quantity, mach, etc

然后我有一张桌子

prodStatusID, prodID, userID, subStatusID

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

subStatusID, subStatusName

我正在尝试获取包含所有第一个表和第二个表的表,但仅包含具有最大状态编号并包含正确状态名称的行。
我的另一个担忧现在可能无关紧要,但在一两年内,当这个东西开始真正填满时,就是性能。我不知道在 select 内有 select 不好,但如果我试图返回所有产品,那么它将为每个产品做一个查询。

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

我已经用谷歌搜索了 2 天来得到这个答案,我看到了 1 条关于拍卖的信息,但即使在研究之后我也没有完全理解它。

4

1 回答 1

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
于 2012-10-18T04:26:45.033 回答