Текущий архив: 2002.12.26;
Скачать: CL | DM;
Внизвыборка записей Найти похожие ветки
← →
Smashich (2002-12-05 20:15) [0]Доброго!
Вопрос с следующем....
мне необходимо сделать выборку из таблицы следующим образом:
задан id-шник записи надо достать n записей перед этой записью...ее саму и одну после
то есть
id name
1 "Вася"
2 "Петя"
3 "Маша"
4 "Паша"
при n=1 результат должен быть:
2 Петя
3 Маша
4 Паша
есть идеи? заранее спасибо!
← →
Anatoly Podgoretsky (2002-12-05 20:21) [1]Вопрос и пример не соответствуют друг другу
← →
Smashich (2002-12-05 20:28) [2]ок поправлюсь! выбрать нужно n+2 записи
n до до заданной ее саму и одну после....
← →
Anatoly Podgoretsky (2002-12-05 20:40) [3]ИД Одну до можно получить по условию MAX(Id-1)
ИД Одну после можно получить по условию MIN(Id+1)
Диапазон с помощью предиката BETWEEN
← →
Prooksius (2002-12-05 20:47) [4]А сортировка при этом должна быть по ID?
Можно сделать ХП, которой выдавать нужные записи, потом
select * from MyStoredProc(:n)
← →
Smashich (2002-12-05 20:47) [5]тоесть я так понимаю, ты хочешь сказать что
при следующих id
5
8
25
select max(id-1) мне вернет 8?
← →
Smashich (2002-12-05 20:48) [6]от это я и сам понимаю...как ХП такую написась не представляю чес говоря...
← →
Smashich (2002-12-05 20:53) [7]
> Prooksius © (05.12.02 20:47)
> А сортировка при этом должна быть по ID?
> Можно сделать ХП, которой выдавать нужные записи, потом
> select * from MyStoredProc(:n)
эт я вполне понимаю...как это сделать? как мне возвратится на одну(n) записей назад?
← →
Prooksius (2002-12-05 20:56) [8]О, а простым селектом, вроде тоже можно:
select id, name from MyTable
where id > :n and
id > (:n + 3)
order by id
← →
Smashich (2002-12-05 21:08) [9]
> 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 21:15) [10]Значит 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
← →
Johnmen (2002-12-05 22:55) [11]>Smashich ©
Желание получить то, что указано в запросе, скорее всего говорит о некорректном проектировании базы данных !
>Prooksius ©
Что-то совсем непонятно...:)))
← →
Prooksius (2002-12-06 10:00) [12]2 Johnmen © (05.12.02 22:55)
Ну чуть не то, но смысл понять можно. :)
Идею я подал, пусть сам поразбирается.
← →
Smashich (2002-12-06 10:24) [13]>Prooksius ©
n - это количество записей которое мне надо выбрать! не номер записи! и не ид!
>Johnmen ©
не мне выбирать:(
← →
Prooksius (2002-12-06 10:38) [14]Вот, сам только что проверил - работает.
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:49) [15]>Prooksius ©
n - это количество записей которое мне надо выбрать! не номер записи! и не ид!
>Johnmen ©
не мне выбирать:(
← →
Prooksius (2002-12-06 10:51) [16]2 Smashich © (06.12.02 10:49)
А у тебя не работает что ли ??? :))))))))
← →
Smashich (2002-12-06 10:53) [17]> Prooksius © (06.12.02 10:51) спасибо
← →
ЮЮ (2002-12-06 10:58) [18]У тебя 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
← →
Prooksius (2002-12-06 11:02) [19]2 ЮЮ © (06.12.02 10:58)
> У тебя N отсчитывает от начала набора, а не от записи с
> нужным ID
Нет не от начала, а от записи с порядковым номером в НД = n
Прочитай Smashich © (05.12.02 21:08)
ID и n не совпадают.
← →
Smashich (2002-12-06 11:05) [20]2 Prooksius © (06.12.02 11:02)
почитай меня же
>Smashich © (06.12.02 10:49)
2Prooksius ©
>n - это количество записей которое мне надо выбрать! не номер записи! и не ид!
← →
ЮЮ (2002-12-06 11:06) [21]да, но ему надо n записей, предшествующих записи c заданным ID
← →
Smashich (2002-12-06 11:07) [22]2 ЮЮ © (06.12.02 11:06)
от ты походу один кто читал с начала;)
← →
Smashich (2002-12-06 11:23) [23]всем спасибо за идеи!!! разобрался!
← →
Prooksius (2002-12-06 11:38) [24]Да действительно, проглючило меня. Сорри.
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.008 c