![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выборка записей [IB6.x, FireBird]
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?