vinay.sarmalkar Ответов: 6

как получить значение последней записи в sql server без использования предложения MAX/TOP?


Дорогие Все,

Я набрался смелости на этот вопрос в интервью интервью недавно. С этим вопросом я сталкивался много раз, но до сих пор у меня нет решения для этого вопроса. Поэтому, пожалуйста, рассмотрите следующий пример и дайте мне правильный ответ на этот вопрос.

Пример:

имя таблицы - эмпрекорд.
первый столбец (первичный ключ)- empid в (этот идентификатор не имеет шаблона, подобного числовому значению символьной базы, поэтому учтите, что их может быть что угодно в этом поле, например 123yuio6yu это будет первый такой идентификатор )

исходя из вышесказанного, как я получу последнюю запись в этой таблице без использования МАКСИМУМ или ВЕРХНИЙ?
а база данных без идентификации столбца с именем ID

заранее спасибо.

6 Ответов

Рейтинг:
44

Gopal Krishna Ranjan

Дорогой,
В этом сценарии мы должны использовать динамический курсор: -

DECLARE @MYVAR NVARCHAR(100)
DECLARE MYTESTCURSOR CURSOR
DYNAMIC 
FOR
SELECT MESSAGE FROM ELMAH_ERROR
OPEN MYTESTCURSOR
FETCH LAST FROM MYTESTCURSOR INTO @MYVAR
CLOSE MYTESTCURSOR
DEALLOCATE MYTESTCURSOR
SELECT @MYVAR

Приведенный выше код тестируется......


Member 11665167

Я искал это некоторое время и получил ваш ответ но на самом деле,
нет никакого способа, чтобы получить последнюю строку, не используя того, или максимум с уникального столбца. SQL Server не записывает внутри себя что-то, что можно использовать для определения порядка добавления строк.
Проверьте свой код по ссылке ниже
http://sqlfiddle.com/#!3/b82295/3

Рейтинг:
31

Christian Graus

Я спрашивал интервьюера, почему они ожидают, что я не использую лучший инструмент для работы.

Если вы хотите выбрать последнюю строку, вставленную в таблицу в базе данных, которая имеет столбец идентификаторов с именем ID, вы можете использовать следующее:

SELECT *
FROM    TABLE
WHERE  ID = IDENT_CURRENT('TABLE')


это ответ, который я нашел с помощью google. возможно, ваша способность проводить фундаментальные исследования-это то, что проверяют эти интервьюеры ?


deshmukhshivkumar

он вернется пустым

Member 10925903

этот код полезен для моего проекта
спасибо

...Прадип

ipaldhi

ВЫБИРАТЬ *
СО СТОЛА
ГДЕ ID = IDENT_CURRENT('ТАБЛИЦА')

это не работает в mysql и oracle
можете ли вы дать мне другое решение

arindamrudra

ВЫБЕРИТЕ IDENT_CURRENT ('TABLE_NAME')
Всегда возвращая NULL.

Рейтинг:
2

Sunanda V.

Использовать это:

Выберите IDENT_CURRENT('Employee')

другой способ:

SELECT ID
FROM    Employee
WHERE  ID = IDENT_CURRENT('Employee')


Рейтинг:
1

J.Mañago

Привет!

последняя функция
Функция LAST() возвращает последнее значение выбранного столбца.

Синтаксис SQL LAST()

SELECT LAST(column_name) FROM table_name


Пример SQL LAST()
У нас есть следующая таблица "заказы" :

O_Id Датаразмещения Цены Ордера Клиента
1 2008/11/12 1000 Хансен
2 2008/10/23 1600 Нильсен
3 2008/09/02 700 Хансен
4 2008/09/03 300 Хансен
5 2008/08/30 2000 Дженсен
6 2008/10/04 100 Нильсен

Теперь мы хотим найти последнее значение столбца "OrderPrice".

Мы используем следующий оператор SQL:

SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders

Совет: обходной путь, если функция LAST() не поддерживается:

SELECT OrderPrice FROM Orders ORDER BY O_Id DESC LIMIT 1

Результирующий набор будет выглядеть следующим образом:

LastOrderPrice
100


Рейтинг:
1

DeepikaSrivastava

Использовать это:

Declare @n int
set @n=1


select empid from emprecord
 where empid not in (
                       select top ((select count(*) from emprecord) - @n ) empid 
                              from emprecord)


vinay.sarmalkar

Привет,

Пожалуйста, проверьте вопрос еще раз.Нет верхнего пункта

Рейтинг:
0

Amir Mahfoozi

Может быть, они имели в виду это ключевое слово : ROWCOUNT , установка его перед запуском инструкции ограничит размер результирующего набора указанным значением в last set rowcount.

Так что у вас должно быть что-то вроде этого :

set rowcount 1

select * from emprecord order by empid desc


Это даст вам последнего сотрудника, отсортированного по их empid.