我必须从产品中选择最低状态后,选择每个产品的最高状态。我的查询是如何在选择最大值后选择分钟
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))
不幸的是它不起作用。我如何从先前选择的最大值组中获得最小值?
有没有遇到麻烦的CTE工作?如果你没有使用太多的行,其他的答案会有效,但是在数据集较大的情况下,CTE效率会更高。 –
不,我没有遇到任何麻烦,然而D Stanley的'其他'答案对我来说更加清晰易懂。两者都有效。你的看起来更加复杂。感谢帮助。这是一个可惜我不能标记两个答案被接受。 – relaj
不用担心!确实,斯坦利的理解更容易,但正如我所说,效率低下很多,而我的惯例实际上很常见。如果您最终在现实世界中使用代码(我的意思是在工作或客户的程序中),则还有其他解决方案,并且出于可伸缩性和性能原因,您希望避免子查询并在可能的地方交叉应用。 –