这是我第一次在这里提问。这对学习很有帮助。
我正在尝试选择一个表,只获取另一个表中特定组的最大值。最好的答案之一是非常接近但不完全存在这一个(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关于拍卖,但即使在研究之后我也完全不了解它。
答案 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