SQL-запрос для поиска значения в нескольких диапазонах

0

У меня есть MySQL db, который содержит дату события и 3 диапазона, то есть from1-to1, from2-to2, from3-to3
каждый диапазон имеет разную цену, то есть от 1-to1 rate1, from2-to2 rate2,...

чтобы три столбца для каждого диапазона: от, до и скорости.

Я пытаюсь найти запрос, который возвращает скорость для данного месяца, что означает, что диапазон диапазона находится в этом месяце и возвращает скорость этого диапазона.

любые идеи?
спасибо!

Теги:

2 ответа

0
Лучший ответ

Кажется, что ваша модель данных не нормализована. Вы должны рассмотреть предложение 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;
  • 0
    благодарю вас. что ты имеешь в виду под "ненормализованным"? и что делает ключевое слово "дата"?
  • 0
    Ключевое слово date - это способ указать литерал даты. Вы говорите базе данных, что эту строку следует рассматривать как дату.
2

Если вы создадите дополнительную таблицу только для диапазонов, вы сохраните свою схему в нормальной форме, и вы сможете легко выбрать нужную скорость: TABLE range, COLUMNS from, to, rate. С внешним ключом, связанным с вашей оригинальной таблицей. Затем вы можете выбрать значение FROM FROM FROM WHERE 'date' >= from AND 'date' <= to.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню