Генерация серии из предопределенной даты (PG) - PullRequest
0 голосов
/ 20 января 2012

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

Хотя я могу довольно легко выбрать некоторые даты;

SELECT generate_series(
now(),
now() + '5 months'::interval,
'1 month'::interval);

и можете выбрать дату, с которой нужно начинать:

SELECT to_date( to_char(CAST(min(created_at) AS DATE),'yyyy-MM') || '-01','yyyy-mm-dd') from users

Как мне объединить два, чтобы я выбирал каждый месяц до сих пор?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Оказывается, это может быть еще проще.:)

SELECT generate_series(
          date_trunc('year', min(created_at))
        , now()
        , interval '1 month') AS month;
FROM   users;

Подробнее о date_trunc в руководстве .

Или, если вы действительно хотите тип данных date вместо timestamp with time zone:

SELECT generate_series(
          date_trunc('year', min(created_at))
        , now()
        , interval '1 month')::date AS month;
FROM   users;
1 голос
/ 20 января 2012

Оказывается, все довольно просто:

SELECT generate_series(
(SELECT to_date( to_char(CAST(min(created_at) AS DATE),'yyyy-MM') || '-01','yyyy-mm-dd') from users),
now(),
'1 month'::interval) as month;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...