2015-08-25 5 views
0

Если у меня есть два столбца типа данных данных в SQL Server, как я могу написать запрос, чтобы получить максимальное число в максимальном количестве другого столбца?Выбор максимального значения только для другого максимального значения

Позвольте привести пример. Допустим, у меня есть эта таблица:

| 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? Как вы можете видеть, в этой таблице, максимальное значение Количество является 4, но максимальное число в Replication где Number = 4 является 1

Все, что я могу думать, чтобы сделать это:

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

, который, очевидно, неправильно и не работает.

+0

могли бы вы опубликовать здесь свой ожидаемый результат – wiretext

ответ

1

Вы можете попробовать Group By и Having

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

Это был его ! Я все еще очень люблю, когда дело доходит до группы. – David

+0

Любая хорошая причина сделать дорогостоящую операцию 'group by'? – jpw

0

Просто используйте подзапрос, чтобы найти максимальное число в выражении WHERE. Если вы просто хотите один единственный номер, в результате нет необходимости использовать группу, и с (что бы сделать запрос намного более дорогой):

select max([replication]) from tab 
where number = (select max(number) from tab) 
Смежные вопросы