选择最大值后如何选择min

时间:2013-10-24 13:04:03

标签: sql max min

在选择每个产品的最高状态后,我必须从产品中选择最低状态。我的问题是

select A. Name
B.LineState
from table A
join table B on A.id=B.refid
where B.Linestate = (select max(B2.Linestate) 
                     from table B2 
                     where B.refid=B2.refid)

这很好,并提供适当的行。现在我必须从之前得到的最小Linestate。我试过了:

...
where B.Linestate = min((select max(B2.linestate) 
                         from table B2 
                         where B.refid=B2.refid))

不幸的是它不起作用。如何从先前选择的最大值组中获得最小值?

2 个答案:

答案 0 :(得分:4)

Common Table Expressions是解决此问题的好方法。它们允许您获得所需的设置,然后立即从那里拉出一个子集。

; WITH GetMaxList AS (
select A. Name
B.LineState
from table A
join table B on A.id=B.refid
where B.Linestate=(select max(B2.Linestate) from table B2 where B.refid=B2.refid)
)

SELECT MIN([Column])
FROM GetMaxList

请记住,这只是示例代码。如果您复制粘贴它将无法工作。你需要做一些阅读来弄清楚如何调整你的查询以使它做你想要的,但这应该让你走上正确的轨道。 ; - )

答案 1 :(得分:0)

您可以将第一个查询作为子查询:

SELECT MIN(LineState) 
FROM
(
    select A. Name
    B.LineState
    from table A
    join table B on A.id=B.refid
    where B.Linestate=(select max(B2.Linestate) from table B2 where B.refid=B2.refid)
)

或者如果你也想要这个名字:

SELECT TOP 1 * 
FROM
(
    select A. Name
    B.LineState
    from table A
    join table B on A.id=B.refid
    where B.Linestate=(select max(B2.Linestate) from table B2 where B.refid=B2.refid)
)
ORDER BY Linestate