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

Откуда:
Сообщений: 59
Подскажите, пожалуйста, как написать select, который бы выбирал данные с конца.
Например, есть таблица с данными:
1
2
3
4
5

Нужно, что бы запрос вернул данные в таком порядке
5
4
3
2
1
2 сен 09, 07:01    [7606190]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
DECLARE @t TABLE (ID int)

INSERT INTO @t(ID)
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5

--Если это нормальная запись
SELECT ID FROM @t ORDER BY ID


--вот это  "данные с конца"
 SELECT ID FROM @t ORDER BY ID DESC
2 сен 09, 07:06    [7606195]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
Alex_WT_
Member

Откуда:
Сообщений: 59
DENIS_CHEL,
Спасибо за совет. Это, конечно, легко сделать сортировкой.
Но если данные вот так идут
5
3
10
58
33
1

и соответственно вывести надо
1
33
58
10
3
5
2 сен 09, 07:10    [7606197]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Что значит данные "идут вот так"?

без ORDER BY данные у вас выходят в том порядке в каком это хочет сервер...
2 сен 09, 07:13    [7606199]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
Alex_WT_
Member

Откуда:
Сообщений: 59
DENIS_CHEL,

DECLARE @t TABLE (ID int)

INSERT INTO @t(ID)
SELECT 5 UNION ALL
SELECT 3 UNION ALL
SELECT 10 UNION ALL
SELECT 58 UNION ALL
SELECT 33 UNION ALL
SELECT 1

SELECT ID FROM @t
Результат
5
3
10
58
33
1

Если мы будем использовать ORDER BY то он будет сортировать записи, но не как не выводить их с конца
А результат вывод записей с конца будет иметь такой вид:
1
33
58
10
3
5

Вот так и надо сделать.
Есть ли MS SQL скрытое поле у таблиц, типа rowid (что-то вроде автоинкремента)?
2 сен 09, 07:23    [7606204]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
IDENTITY - если я вас правильно понял "Есть ли MS SQL скрытое поле у таблиц, типа rowid (что-то вроде автоинкремента)?"

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

Если я вас правильно понял, то вам надо вот это:

DECLARE @t TABLE (ID int identity(1,1), a int)

INSERT INTO @t(a)
SELECT 5  UNION ALL
SELECT 3  UNION ALL
SELECT 10 UNION ALL
SELECT 58 UNION ALL
SELECT 33 UNION ALL
SELECT 1


--Если это нормальная запись
SELECT a FROM @t ORDER BY ID


--вот это  "данные с конца"
SELECT a FROM @t ORDER BY ID DESC
2 сен 09, 07:32    [7606207]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Alex_WT_
Если мы будем использовать ORDER BY то он будет сортировать записи, но не как не выводить их с конца...
У таблиц ни начала, ни конца не бывает (для пользователя)...
2 сен 09, 07:42    [7606211]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
Alex_WT_
Member

Откуда:
Сообщений: 59
DENIS_CHEL,
я привел, скорее всего, не удачный пример.
Вот так если
DECLARE @t TABLE ([DATE_ID] smalldatetime NOT NULL, [NUMBER] int NOT NULL)

INSERT INTO @t(DATE_ID,NUMBER)
SELECT '2009-08-01',5 UNION ALL
SELECT '2009-07-01',3 UNION ALL
SELECT '2007-09-01',10 UNION ALL
SELECT '2009-10-01',58 UNION ALL
SELECT '2005-12-01',33 UNION ALL
SELECT '2009-11-01',1

SELECT date_id FROM @t ORDER BY DATE_ID
--Результат
2005-12-01 00:00:00
2007-09-01 00:00:00
2009-07-01 00:00:00
2009-08-01 00:00:00
2009-10-01 00:00:00
2009-11-01 00:00:00


--вот это "данные с конца". Но это не есть данные с конца
SELECT date_id FROM @t ORDER BY DATE_ID DESC
--Результат
2009-11-01 00:00:00
2009-10-01 00:00:00
2009-08-01 00:00:00
2009-07-01 00:00:00
2007-09-01 00:00:00
2005-12-01 00:00:00

данные с конца будут такими
2009-11-01
2005-12-01
2009-10-01
2007-09-01
2009-07-01
2009-08-01
2 сен 09, 07:43    [7606214]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
в приведенном вами примере нет не конца не начала... Я так понял вы хотите выводить данные в обратном порядке, как они занасились в таблицу?

Тогда вам надо в явном виде записывать очередность занесения данных, как смотрите выше...
2 сен 09, 07:48    [7606217]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
dymka
Member

Откуда: г. Альметьевск (Татарстан)
Сообщений: 235
А тебе еще раз отвечают: нет такого понятия, как порядок записей в таблице! Все записи равноправны между собой. Даже если вы вставите данные в определенной последовательности - ни сервер, ни даже стандарт не гарантирует того, что select * from <table> вернет вам записи в порядке вставки. Если нужен определенный порядок записей, то делайте это с помощью order by. Без этой фразы сервер вернет вам данные как ему заблагорассудится и будет прав. То что сервер в контрольном примере возвращает вам данные в том порядке, что вы их и занесли считайте случайностью. Если определенный порядок нужен - воспользуйтесь искусственными механизмами, типа автоинкрементами, и сортируйте по ним.
2 сен 09, 07:52    [7606218]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
Alex_WT_
Member

Откуда:
Сообщений: 59
Спасибо всем за терпение, и за подсказки, сейчас сделаемс)
2 сен 09, 08:04    [7606229]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
RAndrey
Member

Откуда:
Сообщений: 324
dymka
А тебе еще раз отвечают: нет такого понятия, как порядок записей в таблице! Все записи равноправны между собой. Даже если вы вставите данные в определенной последовательности - ни сервер, ни даже стандарт не гарантирует того, что select * from <table> вернет вам записи в порядке вставки. Если нужен определенный порядок записей, то делайте это с помощью order by. Без этой фразы сервер вернет вам данные как ему заблагорассудится и будет прав. То что сервер в контрольном примере возвращает вам данные в том порядке, что вы их и занесли считайте случайностью. Если определенный порядок нужен - воспользуйтесь искусственными механизмами, типа автоинкрементами, и сортируйте по ним.


Если не ошибаюсь, в случае наличия кластерного индекса без указания ORDER BY сервак будет упорядочивать по индексу.
2 сен 09, 09:18    [7606385]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Если не ошибаюсь, в случае наличия кластерного индекса без указания
> ORDER BY сервак будет упорядочивать по индексу.

ошибаешься.

Posted via ActualForum NNTP Server 1.4

2 сен 09, 09:27    [7606409]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
Anddros
Member

Откуда:
Сообщений: 1077
RAndrey
Если не ошибаюсь, в случае наличия кластерного индекса без указания ORDER BY сервак будет упорядочивать по индексу.

Читайте:
Вопрос на злобу дня - Просмотр кластеризованного индекса - Часть I
Вопрос на злобу дня - Просмотр кластеризованного индекса - Часть II
Вопрос на злобу дня - Просмотр кластеризованного индекса - Часть III
2 сен 09, 09:32    [7606417]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Anddros
RAndrey
Если не ошибаюсь, в случае наличия кластерного индекса без указания ORDER BY сервак будет упорядочивать по индексу.

Читайте:
Вопрос на злобу дня - Просмотр кластеризованного индекса - Часть I
Вопрос на злобу дня - Просмотр кластеризованного индекса - Часть II
Вопрос на злобу дня - Просмотр кластеризованного индекса - Часть III
+1
2 сен 09, 09:41    [7606449]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
DKey
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 15576
Кстати в качестве автоинкремента отлично катит дата создания записи. поел CreateDate - пишется туда по умолчанию функция получения даты-времени а потом по нему и упорядочиывается. Если конечно вставок там не миллионны в секунду (или какая там у нас точность)
2 сен 09, 13:05    [7607781]     Ответить | Цитировать Сообщить модератору
 Re: Выбор записей с конца  [new]
Борис Бритва
Member

Откуда: Киев
Сообщений: 127
в данной задаче катит )
но вот автоинкрмент и системная дата это чуть чуть разные понятия)
2 сен 09, 13:27    [7607980]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить