kiran dangar Ответов: 7

Как получить вторую последнюю строку таблицы в SQL без использования "ORDER BY"


Мне задали вопрос в интервью :

How to get second last record of a SQL table ?...WITHOUT USING "ORDER BY" , and assuming there is no identity column 

Mehdi Gholam

Что плохого в использовании order by, некоторые вещи там должны быть использованы.

7 Ответов

Рейтинг:
49

kiran dangar

я нашел решение, но есть небольшое ограничение, однако оно будет работать в 99% случаев..

select top 1* from (
select * from [TableName] EXCEPT
select top (select (COUNT(1)-2) from [TableName]) * from [TableName]) A


Ограничение : Если последние 2 строки/ вторая последняя строка дублируют любую строку, то это даст неправильный результат... но такие случаи очень редки в реальных сценариях.


Рейтинг:
1

srinivas vadepally

Привет Киран,

Если вы используете идентификатор в своей таблице , то следующий запрос будет полезен,

select * from gallery where GalleryItemid=(ident_current('gallery')-1)

Надеюсь, это вам поможет.


kiran dangar

но не имея идентичности

Рейтинг:
1

Maciej Los

Это действительно старый вопрос. Почему вы ответили на него?

Kornfeld Eliyahu Peter

Из-за решения 5!
Это заставило вопрос прыгнуть в начало списка...

/\jmot

это видно сверху, вот почему я ответил.

Maciej Los

Поэтому удалите его, чтобы избежать голосования вниз.

/\jmot

почему голосуют против?
это неправильный ответ или что-то еще??
я увидел вопрос сверху и ответил на него.если вы считаете, что мой ответ неправильный или вам это не нравится, то голосуйте вниз.
дело не в этом. :)

Рейтинг:
1

Member 13699168

with out id number we find the detail




select top 01 * from (select top 2 * from [dbo].[offbeat]) as a order by id desc


Richard MacCutchan

На шесть лет опоздал, а уже ответил.

Richard Deeming

Не только слишком поздно, но вы даже не потрудились прочитать вопрос: БЕЗ ИСПОЛЬЗОВАНИЯ ФУНКЦИИ "ЗАКАЗАТЬ ПО"

Рейтинг:
0

Karthickeyan.k

select * 
from emp
where empid not in (
    select top (
        (select count(*) from emp) - 2
    ) empid
    from emp
)


Рейтинг:
0

member60

используйте функцию max() в sql .посмотрите на следующий запрос:

select * from emp where id=(select max(id)-1 from emp)


Janardhanam Julapalli

Это прекрасно работает.@member60

Jubinjj007

Его неправильное решение, bcoz id не всегда находится в последовательном порядке, иногда мы удаляем предыдущую запись

Рейтинг:
0

rosharavinda

select TOP 1 *
from [User]
where [Id] not in (
    select top ((select count(*) from [User]) - 2) [Id]
    from [User]
)