powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как сделать select "с.. по"
22 сообщений из 22, страница 1 из 1
Как сделать select "с.. по"
    #35760576
nurdus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе день.
Суть вопроса такая запрос возвращает, например 23 строк:
1 строка
2 строка
3 строка
...
23 строка

Как составить запрос таким образом, чтобы в зависимости от входящего параметра А (принимающий значения 1,2,3... и т.д.),
если А=1, то возвращал с 1 строки по 5 строку
если А=2, то возвращал с 6 строки по 10 строку
если А=3, то возвращал с 11 строки по 15 строку
...
если А=5, то возвращал с 20 строки по 23 строку
ну и т.д.

Большое всем спасибо.
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35760685
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в кащее нельзя выбрать строки с такой-то по такую-то, можно лишь ограничить количество в выборке
select top 20 * from Table
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35760756
nurdus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасиб. Жаль конеШно...
А нет какой нить функции, типа счетчика строк...?!
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35760769
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно... А прокатит ли такой вариант?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Select
   *
From
   (select top  20 
      * 
   from
      Table
   ) as a
Where
   (A= 1  AND a.ID between  1  AND  5 )
   OR
   (A= 2  AND a.ID between  6  AND  10 )
...
   OR
   (A= 5  AND a.ID between  20  AND  23 )
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35760771
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка... Т.е. без

Код: plaintext
 top  20 
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761040
scaro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такой вариант с запросом отчасти прокатывает, только в a.ID between 6 AND 10 (и в других) - нельзя завязываться на ID - не факт что по порядку они идут, вернее какието записи могут быть удалены

к тому же еще одна проблема, не известно число таких ограничений
(A=1 AND a.ID between 1 AND 5)
OR
(A=2 AND a.ID between 6 AND 10)

их может быть 5 а может быть 10 или еще больше
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761266
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте %Library.ScrollableResultSet. Обеспечивает произвольный доступ к любой порции результата запроса. Но, ИМХО, это имеет смысл лишь когда обращений к результатам одного и того же запроса достаточно много, иначе неизбежные накладные расходы по копированию ResultSet'а в глобал могут оказаться неоправданными.
В противном случае для вычисления граничных условий запроса более эффективно воспользоваться прямым доступом к глобалу с данными таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 set id=""
 set nr1= 5 *(A- 1 )- 1 , nr2= 5 *A
 for nr= 1 : 1 :nr1,nr1+ 1 : 1 :nr2 {
   set id = $Order(^User.TableD(id))
   goto:id="" EndOfGlobal
   set:nr=nr1 id1=id
 }
 set id2=id

// далее select * from Table where id between id1 and id2

...
EndOfGlobal // обработка ошибочных значений A
SQL- запрос, полагаю, оформите сами :)
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761452
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scaroнельзя завязываться на ID - не факт что по порядку они идут, вернее какието записи могут быть удалены
Это "ID" результата селекта... А не самой таблицы Table... Там ничего не удаляли. Другое дело что само название свойства у "итоговой" таблицы не такое...
scaroк тому же еще одна проблема, не известно число таких ограничений
...
их может быть 5 а может быть 10 или еще больше
В примере автора все точно описано. В других случаях можно использовать формули и пр. элементы языка...


Т.е. в моем случае это всего лиш предположение...
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761531
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa
Это "ID" результата селекта....А не самой таблицы Table...
в том запросе это именно ID строк в таблице и соответственно удаляя из середины данные, и выборка будет неправильная
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761543
scaro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно а у меня запрос выдает разное количество записей в зависимости от A если = 1 то 2 записи, а если A = 2 то 1 запись, а даже совсем не по 5 записей
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761656
scaro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу класса %Library.ScrollableResultSet, у него тут есть свойство CurrRow

/// Number of current row in the temp table, you can set this property to
/// move to a new location and also use this to check the current position.
Property CurrRow As %Integer;

Правильно я понял? что можно задать начальную позицию и от нее Next()'ом пять шагов сделать по результату запроса?
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761669
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну в описании к свойству так и написано
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761739
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЭто "ID" результата селекта....А не самой таблицы Table...Впервые слышу, что ID - это номер записи в РезалтСете. С т.з. SQL, это все-таки имя поля таблицы. Кстати, похоже, %Library.ScrollableResultSet - единственный гарантированный способ получить мгновенный снимок в Cache, который не будет меняться в течение обработки запроса. Или я ошибаюсь?
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761771
scaro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем %Library.ScrollableResultSet должна подойти, проверил задал начальный CurrRow, и от него прошел Next()'ом 5 строк, сработало
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761835
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor , я ID специально написал в кавычках (если че)... Кто знает! Может есть какое-то свойство у результирующей таблицы которое сможет роканать за это самое ID...
Вот про что и пытаюсь объяснить...
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761851
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scaroСтранно а у меня запрос выдает разное количество записей в зависимости от A если = 1 то 2 записи, а если A = 2 то 1 запись, а даже совсем не по 5 записей
Потому как см. объяснения DAiMor и Alexey Maslov ... Я же быквы I и D (незнаю как еще объяснить) взял чисто условно... В надежде что сотрудники ИС вдруг скажут:
- Да! Конечно! Есть такое свойство у резаулта. Тока оно пишется %rezID

(Это опять же просто предположение)
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761924
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Krvsa, не сбивайте с толку ньюбов, им и так нелегко...
Допустим, свойство есть. Вот, например, у %Library.ScrollableResultSet, как тут уже писали,
оно и вправду есть (Property CurrRow). Каким образом Вы сумели бы употребить св-во этого объекта (унаследованного от %RegisteredObject) в SQL-запросе?
Или Вы хотите сказать, что по отношению к выборке ResultSet можно использовать SELECT (т.е. она является чем-то вроде временной таблицы)? Но ведь и это не так...
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35761965
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovИли Вы хотите сказать, что по отношению к выборке ResultSet можно использовать SELECT (т.е. она является чем-то вроде временной таблицы)?
Да. У меня была надежда на это...
Alexey MaslovНо ведь и это не так...
Надежда умерла...
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35762098
scaro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не в запросе ограничивать, а потом в резалтсете уже нужные взять
set rs = ##class(%ScrollableResultSet).%New()
set rs.ClassName = "класс"
set rs.QueryName = "запрос"
do rs.Execute()
if rs.Count() >=5 set rs.CurrRow = 5
set i = 0
While (i<5) && (rs.Next())
{ вынимае все что нужно из запроса
set i = i +1 }
в этом примере я получаю из результата запроса записи с 6ой по 10ую
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35762152
nurdus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО всем большое... :)
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35766116
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nurdus,
Можно еще вот так:
select count (test_2.id) as rank, test_1.id, test_1.name
from refitem_city.data as test_1 inner join refitem_city.data as test_2 on
test_1.id >= test_2.id
group by test_1.id, test_1.name
having count(test_2.id) between 2 and 4 //выбрать строки со 2 по 4
order by rank
...
Рейтинг: 0 / 0
Как сделать select "с.. по"
    #35766125
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тут еще был пример как сделать что-то подобное...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как сделать select "с.. по"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]