2013-05-30 7 views
0

Я на самом деле пытаются получить второе самое высокое значение таблицы с этой просьбой:Выберите второе самое высокое значение в MySQL

SELECT MIN(`mensualite`) AS min, MAX(`mensualite`) AS max FROM `mensualites` 
WHERE((`financement` = "1200") 
AND (`mensualite` < (SELECT MAX(`mensualite`) FROM `mensualites`))) 

Но, к сожалению, все еще приносят наибольшее значение, а не второй. Вы знаете, где моя проблема?

ответ

1

Добавить пункт WHERE также к вашему подзапросу

SELECT MIN(`mensualite`) AS min, MAX(`mensualite`) AS max FROM `mensualites` 
WHERE `financement` = "1200" 
AND `mensualite` < (SELECT MAX(`mensualite`) FROM `mensualites` WHERE `financement` = "1200") 

Это предполагает, что если максимум происходит в два раза вы хотите наибольшее значение меньше, чем максимум. Если вы хотите получить максимальное значение в этом случае, вы должны использовать решение, основанное на заказе.

+0

Удивительный! Спасибо за быстрый ответ! – cocoggu

3

Вот альтернативный метод:

select mensualite 
from (select distinct mensualite 
     from mensualites 
     WHERE `financement` = "1200" 
     order by mensuality desc 
     limit 2 
    ) m 
order by mensuality 
limit 1 

Он выбирает два значения в подзапросе. Затем он заказывает их по возрастанию и выбирает верхнюю строку.

Это, однако, проще со смещением:

 select distinct mensualite 
     from mensualites 
     WHERE `financement` = "1200" 
     order by mensuality desc 
     limit 1, 1 

(при использовании смещения, строки начинают отсчет с 0, а не 1, так что "1" означает вторую строку).

+0

Я буду использовать решение ptityeti, но спасибо за ваш исчерпывающий ответ! – cocoggu

Смежные вопросы