2013-03-05 2 views
-1

У нас есть люди, у которых есть аренда между двумя конкретными датами, например, 15.01.2012 - 02/03/2013. То, что мне было поручено сделать, - показать отчет «Активный», о том, сколько активных мест аренды в течение каждого месяца. Например, это будет отображаться в январском подсчете и в феврале.SQL Query for Activity в конкретном месяце

Любая помощь по этому вопросу будет оценена по достоинству. Я искал похожие, но ничего не нашел. Мои знания в sql в основном относятся к простым кодам добавления/изменения/удаления.

+2

Какие СУБД вы используете? – Taryn

+0

Как вы определяете активность в течение месяца? Ваш пример активен как в январе, так и в феврале? –

+0

Я использую SQL 2008, извините, первая публикация здесь. В моем примере он активен как в январе, так и в феврале. Я попытался использовать временные таблицы, но не был уверен, как даже начать проходить каждый месяц, чтобы получить эти 30 дней ... –

ответ

0

Общий способ для поиска записей, которые являются «активными» между двумя датами будет

... 
WHERE startDate <= @periodEnd AND endDate >= @periodStart 
+0

Я могу понять общий способ, но чтобы получить результаты Jan 2013/01 - -12, 2013/02 - 10, 2013/03 - 13 .... и т. Д., Мне нужно жестко кодировать каждый месяц? –

2
SELECT * FROM `rentals` WHERE `date` BETWEEN '2013-03-04' AND '2013-04-04' 

Очевидно заменить имя таблицы и имена столбцов с вашим собственным ... Это MySQL, вы hadn 't указано, какое программное обеспечение БД вы используете во время публикации.

+0

Я использую SQL 2008, извините .. но в этом примере они хотят, чтобы ежемесячный отчет, в котором происходит действие за два месяца, должен учитываться. –

0

Если вы хотите найти активы в течение каждого месяца, вам необходимо начать со списка месяцев, а затем сравнить их с записями деятельности. Позвольте мне предположить, что вы начинаете каждый месяц.

select months.yyyymm, count(*) as NumActives 
from (select distinct to_char(startdate, 'yyyy-mm') as yyyymm 
     from activity 
    ) as months join 
    activity a 
    on yyyymm between to_char(a.startdate, 'yyyy-mm') and to_char(a.enddate, 'yyyy-mm') 
group by months.yyyymm 

Я использовал функцию Oracle/Postgres to_char() преобразовать дату в год-месяц представления. Другие базы данных имеют другие способы достижения одной и той же цели.

Смежные вопросы