Выборка из базы близких значений

UDAV

Постоялец
Регистрация
22 Июн 2007
Сообщения
775
Реакции
153
Помогите сделать запрос. Есть база mysql с такой структурой:
id - цифра - группа
1 - 3 - 1
2 - 7 - 1
3 - 10 -2
4 - 49 -2
...и тд, т.е. поле "цифра" содержит только цифры, они не уникальные и идут не одна за другой...

нужно выбрать ОДНУ запись из каждой группы которая соответствует ближайшему значению переменной. Например имеем число 6, нужно выбрать из группы 1 ближайшую запись из поля "цифра", это будет запись с id 2, а из группы 2 выбрать запись с id 3...
групп может быть около 10.
 
Пускай столбцы и таблица описаны так:
Код:
create table T1 (ID TINYINT, CIFRA TINYINT, GRUPPA TINYINT);
insert into t1 values (1,3,1);
insert into t1 values (2,3,1);
insert into t1 values (3,7,1);
insert into t1 values (4,10,2);
insert into t1 values (5,49,2);

Нам нужно найти записи для переменной, чье значение равно 6. Запрос такой:
Код:
select MIN(ID), MIN(CIFRA), GRUPPA from T1
where (select count(*) from T1 as T2 where T2.GRUPPA = T1.GRUPPA and ABS(T2.CIFRA-6) < ABS(T1.CIFRA-6)) = 0
group by GRUPPA
Если не 6, а 18, к примеру, то меняем последнее условие в подзапросе на:
Код:
ABS(T2.CIFRA-18) < ABS(T1.CIFRA-18)
Вот ссылка на SQL Fiddle поиграться: Для просмотра ссылки Войди или Зарегистрируйся
 
Добавлю, что если предполагается множество групп или иерархия в группах, то лучше их (группы) вынести в отдельную таблицу. Потом всё джойним в кучу и получаем аналогичные запросы.
 
Назад
Сверху