从预定义日期生成一系列(PG)

时间:2012-01-20 10:20:31

标签: sql postgresql

我正在尝试从开始日期生成一系列每月日期,这可能是我的用户表中最老用户的日期。

虽然我可以很容易地选择一些日期;

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 个答案:

答案 0 :(得分:1)

原来这很简单:

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;

答案 1 :(得分:1)

事实证明,它可以更简单。 :)

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

有关date_trunc in the manual的更多信息。

或者,如果您确实需要数据类型date而不是timestamp with time zone

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