0

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

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))

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

4

2 回答 2

4

公用表表达式是解决这个问题的好方法。它们允许您获得所需的集合,然后立即从那里提取一个子集。

; 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

请记住,这只是示例代码。复制粘贴就不行了。您需要做一些阅读来弄清楚如何调整您的查询以使其执行您想要的操作,但这应该会让您走上正确的轨道。;-)

于 2013-10-24T13:07:52.650 回答
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
于 2013-10-24T13:11:21.243 回答