Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

выборка записей   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.044 c
14-86110
oleon
2002-12-05 12:51
2002.12.26
Здраствуйте. Какие есть аналоги Visual Source Safe.


6-86049
Alexec
2002-10-28 12:48
2002.12.26
Провайдер


4-86216
NF
2002-11-08 14:39
2002.12.26
Как узнать имя приложения?


1-85965
Alpine
2002-12-15 17:53
2002.12.26
Как сделать Combobox неменяемым (Read Only) ?


14-86091
Gaber
2002-12-02 12:13
2002.12.26
Список стран





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский