У меня есть MySQL db, который содержит дату события и 3 диапазона, то есть from1-to1, from2-to2, from3-to3
каждый диапазон имеет разную цену, то есть от 1-to1 rate1, from2-to2 rate2,...
чтобы три столбца для каждого диапазона: от, до и скорости.
Я пытаюсь найти запрос, который возвращает скорость для данного месяца, что означает, что диапазон диапазона находится в этом месяце и возвращает скорость этого диапазона.
любые идеи?
спасибо!
Кажется, что ваша модель данных не нормализована. Вы должны рассмотреть предложение morjas о создании дополнительной таблицы.
Ниже приведен действительно уродливый запрос, который проверяет, находится ли дата в любом из трех диапазонов, и затем возвращает скорость сопоставления.
select case
when date '2010-12-05' between range1_from and range1_to then range1_rate
when date '2010-12-05' between range2_from and range2_to then range2_rate
when date '2010-12-05' between range3_from and range3_to then range3_rate
end as rate
from events
where date '2010-12-05' between range1_from and range1_to
or date '2010-12-05' between range2_from and range2_to
or date '2010-12-05' between range3_from and range3_to;
Если вы создадите дополнительную таблицу только для диапазонов, вы сохраните свою схему в нормальной форме, и вы сможете легко выбрать нужную скорость: TABLE range, COLUMNS from, to, rate. С внешним ключом, связанным с вашей оригинальной таблицей. Затем вы можете выбрать значение FROM FROM FROM WHERE 'date' >= from AND 'date' <= to.