Как получить временной диапазон в запросе MySQL Select - PullRequest
1 голос
/ 05 мая 2011

Я имею дело с проблемой, с которой просто не могу справиться.Допустим, я получаю результаты с помощью простого запроса MySQL Select:

SELECT date_from.rights, date_to.rights FROM rights

В таблице rights хранятся записи, описывающие права пользователей системы, к которым им необходим доступ.

Разрешенияограничены значениями времени, очевидно, ОТ и ДО.Если date_from или date_to равно NULL, разрешение не ограничено (по времени).

Права таблицы содержат следующие данные:

date_from.,,,,,,,,date_to

2011-05-20.,,,,,,,,2011-08-20 2011-06-20.,,,,,,,,NULL 2011-03-20.,,,,,,,,2011-04-20НОЛЬ .. .,,,,,,,,,,,2011-01-20

Что мне действительно нужно получить с помощью запроса SELECT:

date_from.,,,,,,,,date_to

2011-05-20.,,,,,,,,NULL 2011-03-20.,,,,,,,,2011-04-20НОЛЬ .. .,,,,,,,,,,,2011-01-20

Надеюсь, вы понимаете, что я имею в виду под всем этим.Мне просто нужно сгруппировать результаты, чтобы получить как можно больший диапазон ограниченных по времени разрешений, где каждое отдельное значение даты пересекается;)

Я думаю, что предложение GROUP BY должно делать свою работу, но я просто могу 'найти правильную формулу.Также я хотел бы избежать процедур, если это возможно.

1 Ответ

0 голосов
/ 05 мая 2011

Я думаю, это то, что вы ищете:

select *
from rights
where (date_from is null or date_from <= now())
and (date_to is null or date_to >= now())

Удачи.

...