Получить значение, предшествующее максимальному значению - PullRequest
3 голосов
/ 13 февраля 2010

Например, для данной таблицы разреженных идентификаторов:

|id|
| 1|
| 2|
| 3|
| 6|
| 7|

Я могу получить самый высокий «id» из моей таблицы, используя этот запрос:

SELECT max(id) FROM Comics

Я получаю:

|id|
| 7|

Как я могу получить "id", предшествующий наибольшему "id" (даже если значения не являются непрерывными)?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2010

В общих чертах, вы можете сначала найти максимальный идентификатор (который вы сделали), а затем найти максимальный идентификатор, который меньше, чем (<), максимум.

В частности,

select max(id) from Comics where id < 7

Также вы можете упорядочить результаты в порядке убывания:

select id from Comics order by id desc

, а затем посмотрите на вторую возвращаемую строку .

1 голос
/ 13 февраля 2010
SELECT max(id) FROM Comics

совпадает с

SELECT TOP 1 id FROM Comics ORDER BY ID DESC

примечание: это синтаксис Transact SQL, используйте rownum или limit в зависимости от поставщика

чтобы получить строку 2 вы можете сделать

SELECT TOP 1 ID 
FROM 
    (SELECT TOP 2 id 
     FROM Comics 
     ORDER BY ID DESC) 
ORDER BY ID ASC
0 голосов
/ 13 февраля 2010

это также сделало бы ..

SELECT
    max(id)
FROM
    Comics 
WHERE id < (SELECT max(id) FROM Comics)
...