Текущий архив: 2003.10.16;
Скачать: CL | DM;
Вниз
След. запись? Найти похожие ветки
← →
Deniz (2003-09-25 13:30) [0]Есть таблица (ID integer(ПК), Fam varchar(), Im varchar(), Ot varchar() ...) есть указатель (ID, и все поля) текущего юзера, как с помощью SQL или ХП найти след. юзера по алфавиту(ФИО)? Если не так объяснил, спрашивайте.
← →
Sandman25 (2003-09-25 13:33) [1]select min(fam||im||ot) from t where fam||im||ot > fam1||im1||ot1
← →
Sandman25 (2003-09-25 13:35) [2]Если нужен id то
select id from t
where fam||im||ot = (select min(fam||im||ot) from t where fam||im||ot > fam1||im1||ot1)
← →
Johnmen (2003-09-25 13:36) [3]Примерная болванка :
SELECT MIN(Fam) FROM Table WHERE Fam>{Fam текущего юзера}
← →
Deniz (2003-09-25 14:49) [4]Спасибо, работает.
← →
Deniz (2003-09-25 15:23) [5]Стоп, не работает если встречаются тезки по трем полям :(
← →
Johnmen (2003-09-25 15:35) [6]>Deniz © (25.09.03 15:23)
Тогда нужен дополнительный критерий "различности" записей тезок.
Он есть в твоей таблице ?
← →
Sandman25 (2003-09-25 15:51) [7]Тезок можно находить специально, упорядочиваем по 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)
← →
Mike Kouzmine (2003-09-25 16:05) [8]SELECT ID,MIN(Fam) FROM Table WHERE Fam>{Fam текущего юзера} and ID > (ID текущего юзера)
← →
Mike Kouzmine (2003-09-25 16:06) [9]group by ID
А ID, наверное, <>
← →
Sandman25 (2003-09-25 16:20) [10][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)
← →
Sandman25 (2003-09-25 16:21) [11]Хотя нет, [10] Sandman25 © (25.09.03 16:20) неправильно.
← →
Johnmen (2003-09-25 17:21) [12]Если хотим получить следующего от указанного, и у указанного есть полный тезка, которого и хотим получить, то нужен доп.критерий очередности. Если критерий это ID, то достаточно добавить в запрос на поиск MIN еще и ID указанного.
Иначе задача нерешаема...
← →
Sandman25 (2003-09-25 17:36) [13]В-общем, задача решена в [7] :)
← →
Deniz (2003-09-26 08:07) [14]Для 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-26 10:25) [15]Если уж поддерживается 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
← →
Johnmen (2003-09-26 10:37) [16]>Sandman25 © (26.09.03 10:25)
Не совсем верно, т.к. Яковлев может иметь ID=1, a Акунин ID=1000
:)
← →
Sandman25 (2003-09-26 12:40) [17][16] Johnmen © (26.09.03 10:37)
Согласен. Лопухнулся :)
Страницы: 1 вся ветка
Текущий архив: 2003.10.16;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.009 c