我正在尝试从开始日期生成一系列每月日期,这可能是我的用户表中最老用户的日期。
虽然我可以很容易地选择一些日期;
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
我怎样才能将这两者结合起来,直到现在我每个月都在选择?
答案 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;