如何在SQL中获取列的最大值?

时间:2015-06-29 18:37:36

标签: sql-server

我想找到列的最大值。我有以下表结构:

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

从上表中我希望每个OrderIDTaskID得到以下结果,显示最大值:

SerialNo
2
3
1
2

使用MAX我也会收到OrderIDTaskID,这不是我想要的结果。我正在使用SQL Server。我如何得到预期的结果?

4 个答案:

答案 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的方式,即您的具体查询是什么样的。

  

"从上表中我希望每个OrderIDTaskID得到以下结果,显示最大值:"

SerialNo
2
3
1
2

你在这里犯了一个错误:你似乎假设表记录有固定的顺序。但是,如果未明确指定ORDER BY子句,则无法保证始终以相同的顺序检索行。

不在结果集中包含OrderIDTaskID,并且由于上述事实,您的MAX(SerialNo)值基本上没有任何意义,因为您不会知道它们的最大价值。您不应该假设它们是原始表中显示的组的最大值,因为原始表和派生结果集都不是任何确定性顺序,除非您明确ORDER它们。

因此,我强烈建议您在结果集中加入OrderIDTaskID,以便为MAX值赋予意义:

SELECT OrderID, TaskID, MAX(SerialNo)
FROM YourTable
GROUP BY OrderID, TaskID

如果您真的不想在结果集中使用OrderIDTaskID,那么就不要将其放在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

SQL Fiddle Demo