Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
 еще более ламерский вопрос  [new]
fred
Member

Откуда:
Сообщений: 1
Совсем недавно начал изучать SQL и возникла тривиальная задача. Нужно вернуть из таблицы предпоследнюю запись. Как это можно сделать наилучшим образом без использования курсоров.
26 ноя 00, 08:50    [31185]     Ответить | Цитировать Сообщить модератору
 RE:еще более ламерский вопрос  [new]
Дмитрий
Guest
Делаешь так:

DECLARE @RecNum int

SET @RecNum = (SELECT COUNT(*) FROM YouTable)-1

SET rowcount @RecNum

SELECT TOP 1 Field1, Field2 FROM YouTable

SET rowcount 0

Это и должна быть предпоследняя запись в таблице... А ты учел, что при INSERT'е записи добавляются не обязательно в конец? На то он и INSERT... Тогда для вывода предпоследней записи нуна иметь столбец с IDENTITY. Тогда так:

DECLARE @idLast int

SET @idLast = (SELECT MAX(IdentityID) FROM YouTable)

SELECT TOP 1 ..... FROM YouTable WHERE IdentityID<@idLast ORDER BY IdentityID DESC

По-моему, так... Если нигде не ошибся ) В общем, удачи!
14 мар 01, 14:13    [31186]     Ответить | Цитировать Сообщить модератору
 RE:еще более ламерский вопрос  [new]
Slawa
Guest
2Дмитрий

К примеру в Table1 находятся такие данные:

Name Value
---------- -----------
Ann 9
Bill 21
Jhon 4
George 26

Твой первый пример извлекает первую запись (Ann,9), а второй пример запись (Bill,21)
Думаю ламерский вопрос fred'a состоял в том, что-б вытащить запись (Jhon,4), мой код её извлекает:

SET NOCOUNT ON
DECLARE @RecNum int
SELECT * INTO #tmp1 FROM Table1
SET @RecNum = @@rowcount-2
SET rowcount @RecNum
DELETE FROM #tmp1
SET NOCOUNT OFF
SELECT TOP 1 * FROM #tmp1
DROP TABLE #tmp1
SET rowcount 0

ОК?
16 мар 01, 11:49    [31187]     Ответить | Цитировать Сообщить модератору
Все форумы / Вопрос-Ответ Ответить