2016-06-08 3 views
1

Я хочу получить счет из таблицы активных списков квартир неделю за неделей. Таблица выглядит следующим образом (за исключением гораздо больше):Как выбрать количество активных активных недель недели за неделю?

id  created_at   delisted_at 
2318867 2014-11-12 18:57:44 Null 
2329665 2014-11-14 4:36:32 Null 
1431098 2014-07-25 5:45:03 Null 
193-09-28 10:10:46 2014-09-28 10:10:45 
2490774 2014-12-05 0:08:47 Null 

получить активные списки на одну неделю, вы должны проверить, что created_at <= end_of_week и delisted_at > end_of_week.

В таблице результатов хотелось бы как более полной версии:

Week  Number of Active Listings 
5/1/2016 3024 
5/8/2016 11234 
5/15/2016 11234 

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

Как написать запрос для достижения такого поведения?

+0

Возможно, вам понадобится таблица календаря для хранения дат конца недели; вы затем присоединитесь к ним. – mustaccio

+0

@mustaccio просто любопытно, как вы отформатировали таблицы так, как в вашем редактировании? –

+0

Абзац с отступом в 4 пробела обрабатывается как код и печатается с использованием моноширинного шрифта. В верхней части окна редактирования есть значок значка вопроса, щелкните его при следующем редактировании вопроса (или ответа). – mustaccio

ответ

0

Вот пример месяца. Сначала создайте список месяцев, используя generate_series(). Остальное - это просто объединения и скопления:

select g.mon_start, g.mon_end, count(a.id) as numActives 
from (select g.mon_start, g.mon_start + interval '1 month' as mon_end 
     from generate_series('2016-01-01'::timestamp, '2016-06-01'::timestamp, interval '1 month' 
         ) g(mon_start) 
    ) g left join 
    actives a 
    on a.created_at < g.mon_end and 
     (a.delisted_at >= mon_end or a.delisted_at is null) 
group by g.mon_start, g.mon_end 
order by g.mon_start, g.mon_end; 

Подобная идея работает и в течение нескольких недель.

+0

У меня ошибка: ERROR: функция generate_series (временная метка без часового пояса, временная метка без часового пояса) не существует LINE 4: from generate_series ('2016-01-01' :: timestamp, '2016-06 ... ^ СОВЕТ. Никакая функция не соответствует указанному имени и типам аргументов. Возможно, вам придется добавить явные типы приведения. –