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