Я создаю этот отчет в системе для компании Billboard.
У них есть таблица, в которой хранятся все их рекламные щиты, и, помимо других данных, рекламные щиты имеют дату начала и дату окончания (оба могут быть нулевыми).
Если по какой-либо причине рекламные щиты перестают использоваться, они устанавливают дату окончания, и после этой даты они станут недоступны для использования. То же самое с датой начала (в случае, если они только установили новую доску, и она будет доступна для использования после установленной даты начала).
В этом отчете я должен получить сумму всех возможных рекламных мест за определенный период времени.
Итак, допустим, что за выбранный период (4 недели, например)
* На 1 неделе 500 доступных досок
* На 2-й неделе стало недоступно одно правление (доступно 498 досок)
* На 3 неделе стали доступны две доски (в наличии 501 доска)
* На 4-й неделе одна доска стала доступной, а другая - недоступной (что сделало 501 доску доступной)
Итак, у меня должно быть в общей сложности 1990 доступных досок за этот период, вот результат, к которому я стремлюсь.
Как я могу получить это в одном запросе?
Недели придут из формы HTML, и мне нужно преобразовать их в даты перед запросом, поэтому у меня просто будут даты, на которые я хочу узнать, сколько досок доступно на сайте.
Запрос на получение количества досок на ОДНУ конкретную дату выглядит так:
SELECT
COUNT(IdBillboard)
FROM
tBillboards
WHERE
(StartDate IS NULL OR StartDate <= '2009-01-05 00:00:00')
AND (FinishDate IS NULL OR FinishDate >= '2009-01-05 00:00:00')
Я не могу просто добавить условные выражения AND
и OR
для каждой даты, потому что мне нужно новый пересчет для отдельных дат. Я думал об использовании WHILE
, но не мог понять, как именно это сделать для этого случая. Так вот где я застрял ...
Я опубликую больше деталей, если они кому-нибудь понадобятся.
Спасибо, Гейб