Andy Lanng Ответов: 1

Сложный запрос mysql с переменными условиями


Эй ребята,

Фон
Я работаю над тем, чтобы сделать одну из наших баз данных намного более эффективной. Самая большая таблица имеет 3 строки с некоторыми текстовыми столбцами, содержащими одно из двух значений >_ & lt;

Поэтому я вынул текст, выполнил некоторые шаги нормализации и де-нормализации, добавил множество индексов там, где это требовалось, и это сделало его примерно на 3K% -6K% более эффективным. ВУТ. "Быстро довольно" больше не является неправильным термином, боссы все впечатлены, клиенты очень довольны и т. д...

Так что теперь они хотят, чтобы я сделал еще один шаг".;

Во всяком случае, достаточно предыстории. Вот в чем проблема

Проблема

Все наши продукты имеют линейку EAC (fromcon и tocon). Основываясь на нескольких других критериях, мне нужно найти, где они перекрываются или смежны, чтобы я мог уменьшить общее количество записей.

То Есть:
TableId, FromCon, ToCon, OtherCrieria
1      , 0      , 100  , 1
2      , 101    , 200  , 1
3      , 200    , 400  , 1
4      , 401    , 600  , 2
5      , 601    , 800  , 1


Таким образом, выше есть первые три строки, которые смежны или перекрываются с теми же критериями, другая строка, которая смежна, но критерии не совпадают, и последняя строка с соответствующими критериями, но диапазон не смежен с другими совпадениями. Результаты должны выглядеть следующим образом:
TableId, FromCon, ToCon, OtherCrieria
1 (min), 0      , 400  , 1
4      , 401    , 600  , 2
5      , 601    , 800  , 1


Так как же я мог сделать что-то подобное?

Спасибо
Энди

Что я уже пробовал:

Даже не знаю с чего начать так что вот некоторые тестовые данные вместо этого
select * from (
	select 1 as id, 0 as fromcon, 100 as tocon, 1 as conditions
	union select 2, 101, 200, 1
	union select 3, 200, 400, 1
	union select 4, 401, 600, 2
	union select 5, 601, 800, 1
    
	union select 6, 100, 200, 3
	union select 7, 200, 400, 4
    union select 8, 75, 150, 3
    union select 9, 50, 350, 3
    ) as test