仅为另一个最大值选择最大值

时间:2015-08-25 18:29:42

标签: sql sql-server

如果我在SQL Server中有两个int数据类型列,我如何编写一个查询,以便获得最大数量,在另一列的最大数量?

让我举个例子。可以说我有这张桌子:

|  Name | Version | Category | Value | Number | Replication |
|:-----:|:-------:|:--------:|:-----:|:------:|:-----------:|
| File1 | 1.0     | Time     |   123 |      1 |           1 |
| File1 | 1.0     | Size     |   456 |      1 |           1 |
| File2 | 1.0     | Time     |   312 |      1 |           1 |
| File2 | 1.0     | Size     |   645 |      1 |           1 |
| File1 | 1.0     | Time     |   369 |      1 |           2 |
| File1 | 1.0     | Size     |   258 |      1 |           2 |
| File2 | 1.0     | Time     |   741 |      1 |           2 |
| File2 | 1.0     | Size     |   734 |      1 |           2 |
| File1 | 1.1     | Time     |   997 |      2 |           1 |
| File1 | 1.1     | Size     |   997 |      2 |           1 |
| File2 | 1.1     | Time     |   438 |      2 |           1 |
| File2 | 1.1     | Size     |   735 |      2 |           1 |
| File1 | 1.1     | Time     |   786 |      2 |           2 |
| File1 | 1.1     | Size     |   486 |      2 |           2 |
| File2 | 1.1     | Time     |   379 |      2 |           2 |
| File2 | 1.1     | Size     |   943 |      2 |           2 |
| File1 | 1.2     | Time     |   123 |      3 |           1 |
| File1 | 1.2     | Size     |   456 |      3 |           1 |
| File2 | 1.2     | Time     |   312 |      3 |           1 |
| File2 | 1.2     | Size     |   645 |      3 |           1 |
| File1 | 1.2     | Time     |   369 |      3 |           2 |
| File1 | 1.2     | Size     |   258 |      3 |           2 |
| File2 | 1.2     | Time     |   741 |      3 |           2 |
| File2 | 1.2     | Size     |   734 |      3 |           2 |
| File1 | 1.3     | Time     |   997 |      4 |           1 |
| File1 | 1.3     | Size     |   997 |      4 |           1 |
| File2 | 1.3     | Time     |   438 |      4 |           1 |
| File2 | 1.3     | Size     |   735 |      4 |           1 |

如何编写查询,以便选择最大Replication值的最大Number值?正如您所看到的,在此表中,Number中的最大值为4,但ReplicationNumber = 41的最大数量

我能想到的就是:

SELECT MAX(Replication) FROM Table
WHERE Number IS MAX;

这显然是错误的,并且不起作用。

2 个答案:

答案 0 :(得分:1)

您可以尝试Group ByHaving

select max(Replication) from Table_Name group by [Number] having 
[Number]=(select max([Number]) from Table_Name)

答案 1 :(得分:0)

只需使用子查询在where子句中查找最大数字。如果你只想要一个单一的数字作为结果,就不需要使用group by和having(这将使查询更加昂贵):

select max([replication]) from tab
where number = (select max(number) from tab)