我想找到列的最大值。我有以下表结构:
OrderID | TaskID | SerialNo
1 | 1 | 1
1 | 1 | 2
1 | 2 | 1
1 | 2 | 2
1 | 2 | 3
2 | 1 | 1
2 | 2 | 1
2 | 2 | 2
从上表中我希望每个OrderID
和TaskID
得到以下结果,显示最大值:
SerialNo
2
3
1
2
使用MAX
我也会收到OrderID
和TaskID
,这不是我想要的结果。我正在使用SQL Server。我如何得到预期的结果?
答案 0 :(得分:0)
select OrderId, TaskId, max(SerialNo)
from MyTable
group by OrderId, TaskId
如果您真的只想要max(SerialNo)
,则可以省略选择中的其他两列。
答案 1 :(得分:0)
请尝试使用以下代码段。
SELECT MAX(SerialNo) AS SerialNo
FROM TableName
GROUP BY OrderID, TaskID
答案 2 :(得分:0)
"通过使用MAX我也得到了OrderID和TaskID,这不是我想要的结果。"
很遗憾,您没有说 您使用MAX
的方式,即您的具体查询是什么样的。
"从上表中我希望每个
OrderID
和TaskID
得到以下结果,显示最大值:"SerialNo 2 3 1 2
你在这里犯了一个错误:你似乎假设表记录有固定的顺序。但是,如果未明确指定ORDER BY
子句,则无法保证始终以相同的顺序检索行。
不在结果集中包含OrderID
和TaskID
,并且由于上述事实,您的MAX(SerialNo)
值基本上没有任何意义,因为您不会知道它们的最大价值。您不应该假设它们是原始表中显示的组的最大值,因为原始表和派生结果集都不是任何确定性顺序,除非您明确ORDER
它们。
因此,我强烈建议您在结果集中加入OrderID
和TaskID
,以便为MAX
值赋予意义:
SELECT OrderID, TaskID, MAX(SerialNo)
FROM YourTable
GROUP BY OrderID, TaskID
如果您真的不想在结果集中使用OrderID
和TaskID
,那么就不要将其放在SELECT
子句中。但要注意的是,你会被留下一堆毫无意义的(因为已经取出的背景)数字。
答案 3 :(得分:0)
如果您想获得max
值,可以从select
语句中删除其他两列,如下所示:
SELECT MAX(SerialNo) AS SerialNo
FROM test
GROUP BY OrderID, TaskID
ORDER BY OrderID, TaskID --added order by to precisely replicate your output above