![]() |
![]() |
|
V8: Запрос ВЫБРАТЬ ПЕРВЫЕ 1 Ø |
☑ | ||
---|---|---|---|---|
0
ValeriTim
16.11.05
✎
16:10
|
Мне нужно выбрать _последнюю_ запись в регистре накопления Взаиморасчеты с клиентами, но как это сделать непойму. ВЫБРАТЬ ПЕРВЫЕ 1 с обратной сортировкой по регистратору не получается. Подскажите.
|
|||
1
mikecool
16.11.05
✎
16:11
|
Используй вложенный подзапрос, сортируй в нем, а во внешнем запросе выбирай ПЕРВЫЕ 1
|
|||
2
Att8
16.11.05
✎
16:13
|
срез последних?
|
|||
3
ValeriTim
16.11.05
✎
16:15
|
(2) это регистр накопления
(1) т.е. он выбирает первые до сортировки ? получается так ? |
|||
4
mikecool
16.11.05
✎
16:16
|
(3) именно, сначала отбор записей, а затем их упорядочивание
|
|||
5
Гений самоучка
16.11.05
✎
16:19
|
2(4) Допустимо сортировать в подзапросе?
Я вроде пытался - не получилось, но может в другом проблема была. Про oracle знаю, что такая возможность появилась только в 8-ке. А майкрософтовский sql позволяет? |
|||
6
mikecool
16.11.05
✎
16:26
|
(5) В подзапросе нельзя применять УПОРЯДОЧИТЬ ПО без применения ПЕРВЫЕ - так что мешает в подзапросе выбрать ПЕРВЫЕ 1000000000 записей(или сколько нужно нулей)?
|
|||
7
ValeriTim
16.11.05
✎
16:33
|
(6) Опа ! Мне нужно получить именно _последнюю_ запись на определенную дату, чтобы узнать дату этой записи. А если я в подзапросе немогу упорядочить, то как я могу получить именно последнюю ?
|
|||
8
mikecool
16.11.05
✎
16:39
|
ВЫБРАТЬ <....>
ИЗ (ВЫБРАТЬ ПЕРВЫЕ 1000000000 <....> ИЗ <....>(если таблица виртуальная - передаешь "определенную дату" как параметр, иначе добавляешь условие ГДЕ Дата <= "определенная дата")) УПОРЯДОЧИТЬ ПО <....> ) вместо <....> подставляешь нужные поля/таблицы |
|||
9
Гений самоучка
16.11.05
✎
16:42
|
2(6) понятно. :)
|
|||
10
cathode
16.11.05
✎
16:45
|
(0) Может быть, я неправильно понял вопрос, но, по-моему здесь подзапрос не нужен.
ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хоз ГДЕ НАЧАЛОПЕРИОДА(Хоз.Период, ДЕНЬ) = &ДатаПериода УПОРЯДОЧИТЬ ПО Хоз.Период УБЫВ Показывает последнюю произведенную запись регистра на указанную дату. Тут одна загвоздка по поводу упорядочения по регистратору: непосредственное упорядочение по регистратору ничего не даст, так как будут сравниваться GUID'ы документов, использование же конструкции УПОРЯДОЧИТЬ ПО Регистратор.Дата будет порождать дикое количество связываний с таблицами документов. |
|||
11
ValeriTim
16.11.05
✎
16:45
|
А если у меня этот регистр имеет хрен знает сколько записей ... это же сколько запрос то потянет ...
А это не аналог ? ВЫБРАТЬ ПЕРВЫЕ 1 <....> ИЗ (ВЫБРАТЬ <....> ИЗ <....>(если таблица виртуальная - передаешь "определенную дату" как параметр, иначе добавляешь условие ГДЕ Дата <= "определенная дата")) УПОРЯДОЧИТЬ ПО <....> ) |
|||
12
ValeriTim
16.11.05
✎
16:47
|
(10) Вот я так и делал (за исключением упорядочивания). Упорядочивал по регистратору - видимо в этом и была моя ошибка. Попробую по периоду...
|
|||
13
A
16.11.05
✎
16:56
|
(0) Наверное так попроще будет
Выб = РегистрыНакопления.Регистр.Выбрать(,,,"Убыв"); Если Выб.Следующий() Тогда ПоследняяДатаВРегистре = Выб.Период КонецЕсли; |
|||
14
mikecool
16.11.05
✎
16:58
|
(13) - только не делай так на сертификации - автоматом два :)
а насчет своего варианта в (8) уверен, работает |
|||
15
Гений самоучка
16.11.05
✎
16:59
|
2(11) а как бы ты ни делал - все равно потянет - нужно же сортировать ВСЕ.
Можно еще например так - в одном запросе находить нужное максимальное(минимальное) значение, потом результат связывать с исходными данными. Вообще задача известая (иногда используется при тестированиеи на знание основ SQL) и разработано много запросов без использования упорядочивания в подзапросе, можно попробовать найти ответ/задать вопрос на SQL.ru. Но если (6) работает - то проще наверно не придумаешь, оптимальней наверно можно |
|||
16
A
16.11.05
✎
17:08
|
+13 или так
ВЫБРАТЬ ПЕРВЫЕ 1 Регистр.Период КАК Период Регистр. ... ... ИЗ РегистрНакопления.Регистр.Обороты[ОстаткиИОбороты](, , Запись, ) КАК Регистр УПОРЯДОЧИТЬ ПО Период УБЫВ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |