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

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

След. запись? [D7, IB5.x, FireBird]


Deniz ©   (2003-09-25 13:30:00) 

Есть таблица (ID integer(ПК), Fam varchar(), Im varchar(), Ot varchar() ...) есть указатель (ID, и все поля) текущего юзера, как с помощью SQL или ХП найти след. юзера по алфавиту(ФИО)? Если не так объяснил, спрашивайте.


Sandman25   (2003-09-26 12:40:00) [1]

[16] Johnmen © (26.09.03 10:37)

Согласен. Лопухнулся :)


Johnmen   (2003-09-26 10:37:00) [2]

>Sandman25 © (26.09.03 10:25)

Не совсем верно, т.к. Яковлев может иметь ID=1, a Акунин ID=1000
:)


Sandman25   (2003-09-26 10:25:00) [3]

Если уж поддерживается first, то можно еще проще :)

select first 1 ID, FAM, IM, OT from RAB
where (FAM || IM || OT >= :AFAM || :AIM || :AOT) and (ID > :CURR_ID)
order by FAM, IM, OT, ID


Deniz   (2003-09-26 08:07:00) [4]

Для FB нашлось решение попроше чем Sandman25 © (25.09.03 15:51) [7], но не для IB5.6:


select first 1 ID, FAM, IM, OT from RAB
where ((FAM || IM || OT = :AFAM || :AIM || :AOT) and (ID > :CURR_ID))
or (FAM || IM || OT > :AFAM || :AIM || :AOT)
order by FAM, IM, OT, ID


Всем спасибо.


Sandman25   (2003-09-25 17:36:00) [5]

В-общем, задача решена в [7] :)


Johnmen   (2003-09-25 17:21:00) [6]

Если хотим получить следующего от указанного, и у указанного есть полный тезка, которого и хотим получить, то нужен доп.критерий очередности. Если критерий это ID, то достаточно добавить в запрос на поиск MIN еще и ID указанного.
Иначе задача нерешаема...


Sandman25   (2003-09-25 16:21:00) [7]

Хотя нет, [10] Sandman25 © (25.09.03 16:20) неправильно.


Sandman25   (2003-09-25 16:20:00) [8]

[8] Mike Kouzmine © (25.09.03 16:05)

Точно.
select id from t
where (fam||im||ot =
(select min(fam||im||ot)
from t where fam||im||ot >= fam1||im1||ot1
and id > id1)


Mike Kouzmine   (2003-09-25 16:06:00) [9]

group by ID
А ID, наверное, <>


Mike Kouzmine   (2003-09-25 16:05:00) [10]

SELECT ID,MIN(Fam) FROM Table WHERE Fam>{Fam текущего юзера} and ID > (ID текущего юзера)


Sandman25   (2003-09-25 15:51:00) [11]

Тезок можно находить специально, упорядочиваем по id
select id from t
where (fam||im||ot = (select min(fam||im||ot) from t where fam||im||ot > fam1||im1||ot1)
and not exists (select * from t where fam||im||ot = fam1||im1||ot1 and id > id1)
or id = (select min(id) from t where fam||im||ot = fam1||im1||ot1 and id > id1)


Johnmen   (2003-09-25 15:35:00) [12]

>Deniz © (25.09.03 15:23)

Тогда нужен дополнительный критерий "различности" записей тезок.
Он есть в твоей таблице ?


Deniz   (2003-09-25 15:23:00) [13]

Стоп, не работает если встречаются тезки по трем полям :(


Deniz   (2003-09-25 14:49:00) [14]

Спасибо, работает.


Johnmen   (2003-09-25 13:36:00) [15]

Примерная болванка :
SELECT MIN(Fam) FROM Table WHERE Fam>{Fam текущего юзера}


Sandman25   (2003-09-25 13:35:00) [16]

Если нужен id то
select id from t
where fam||im||ot = (select min(fam||im||ot) from t where fam||im||ot > fam1||im1||ot1)


Sandman25   (2003-09-25 13:33:00) [17]

select min(fam||im||ot) from t where fam||im||ot > fam1||im1||ot1


Наверх

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