Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

выборка записей [IB6.x, FireBird]


Страницы:   1 2

Smashich ©   (2002-12-05 20:15:00) 

Доброго!
Вопрос с следующем....
мне необходимо сделать выборку из таблицы следующим образом:
задан id-шник записи надо достать n записей перед этой записью...ее саму и одну после
то есть
id name
1 "Вася"
2 "Петя"
3 "Маша"
4 "Паша"

при n=1 результат должен быть:

2 Петя
3 Маша
4 Паша

есть идеи? заранее спасибо!


Prooksius   (2002-12-06 11:38:00) [1]

Да действительно, проглючило меня. Сорри.


Smashich   (2002-12-06 11:23:00) [2]

всем спасибо за идеи!!! разобрался!


Smashich   (2002-12-06 11:07:00) [3]

2 ЮЮ © (06.12.02 11:06)
от ты походу один кто читал с начала;)


ЮЮ   (2002-12-06 11:06:00) [4]

да, но ему надо n записей, предшествующих записи c заданным ID


Smashich   (2002-12-06 11:05:00) [5]

2 Prooksius © (06.12.02 11:02)
почитай меня же

>Smashich © (06.12.02 10:49)

2Prooksius ©
>n - это количество записей которое мне надо выбрать! не номер записи! и не ид!


Prooksius   (2002-12-06 11:02:00) [6]

2 ЮЮ © (06.12.02 10:58)


> У тебя N отсчитывает от начала набора, а не от записи с
> нужным ID


Нет не от начала, а от записи с порядковым номером в НД = n
Прочитай Smashich © (05.12.02 21:08)
ID и n не совпадают.


ЮЮ   (2002-12-06 10:58:00) [7]

У тебя N отсчитывает от начала набора, а не от записи с нужным ID

Надо из взять всю выборку
Select top n * from MyTable where Id < @ID order by ID desc
или n записей, если не поддерживается top

и две записи из
Select top 2 * from MyTable where Id >= @ID order by ID


Smashich   (2002-12-06 10:53:00) [8]

> Prooksius © (06.12.02 10:51) спасибо


Prooksius   (2002-12-06 10:51:00) [9]

2 Smashich © (06.12.02 10:49)
А у тебя не работает что ли ??? :))))))))


Smashich   (2002-12-06 10:49:00) [10]

>Prooksius ©
n - это количество записей которое мне надо выбрать! не номер записи! и не ид!
>Johnmen ©
не мне выбирать:(


Prooksius   (2002-12-06 10:38:00) [11]

Вот, сам только что проверил - работает.

CREATE PROCEDURE NEW_PROCEDURE (n integer)
returns (id integer, Name varchar(100))
AS
declare variable i integer;
declare variable Num integer;
begin
i = 0;
Num = 0;
for select ID, name from MyTable order by ID into :id, :name do begin
i = i + 1;
if (i >= n) then begin
suspend;
Num = Num + 1;
if (num = (n + 2)) then exit;
end
end
end


Smashich   (2002-12-06 10:24:00) [12]

>Prooksius ©
n - это количество записей которое мне надо выбрать! не номер записи! и не ид!
>Johnmen ©
не мне выбирать:(


Prooksius   (2002-12-06 10:00:00) [13]

2 Johnmen © (05.12.02 22:55)
Ну чуть не то, но смысл понять можно. :)
Идею я подал, пусть сам поразбирается.


Johnmen   (2002-12-05 22:55:00) [14]

>Smashich ©

Желание получить то, что указано в запросе, скорее всего говорит о некорректном проектировании базы данных !

>Prooksius ©

Что-то совсем непонятно...:)))


Prooksius   (2002-12-05 21:15:00) [15]

Значит n - порядковый номер записи в наборе. Так бы и написал. :)
А я так понял, что n совпадает с id...

тогда точно ХП. Можно так.

...
i = 0;
for select id, name from MyTable order by id into :id, :name do begin
if ((i > n) and (i < (n + 3))) then suspend;
i = i + 1;
end


Smashich   (2002-12-05 21:08:00) [16]


> Prooksius © (05.12.02 20:56)
> О, а простым селектом, вроде тоже можно:
>
> select id, name from MyTable
> where id > :n and
> id > (:n + 3)
> order by id


не очень понимаю:(

вот у меня к примеру последовательность ид

2
8
12
35
42
89

приведи конкретный запрос который произведет выборку к примеру

12
35
42
59

то есть n=2 а ид от которого ищем равно 42?


Prooksius   (2002-12-05 20:56:00) [17]

О, а простым селектом, вроде тоже можно:

select id, name from MyTable
where id > :n and
id > (:n + 3)
order by id


Smashich   (2002-12-05 20:53:00) [18]


> Prooksius © (05.12.02 20:47)
> А сортировка при этом должна быть по ID?
> Можно сделать ХП, которой выдавать нужные записи, потом
> select * from MyStoredProc(:n)

эт я вполне понимаю...как это сделать? как мне возвратится на одну(n) записей назад?


Smashich   (2002-12-05 20:48:00) [19]

от это я и сам понимаю...как ХП такую написась не представляю чес говоря...


Smashich   (2002-12-05 20:47:00) [20]

тоесть я так понимаю, ты хочешь сказать что
при следующих id
5
8
25
select max(id-1) мне вернет 8?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо