Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.019 c
7-86187
Роман02
2002-10-22 15:06
2002.12.26
Програмное измерение температуры процессора


14-86163
Namo
2002-11-30 15:20
2002.12.26
Неблагодарное дело ли это...


3-85838
Kudatsky
2002-12-06 12:04
2002.12.26
О переходе на dbExpress


1-85883
vJet
2002-12-15 12:42
2002.12.26
Разделение файла


14-86078
Igor_thief
2002-11-10 21:33
2002.12.26
Excel