我正试图从一个开始日期生成一系列每月日期,该日期恰好是我的users表中最年长用户的日期。
虽然我可以很容易地选择一些日期;
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
到目前为止,我如何将两者结合起来,以便每个月都进行选择?
事实证明,它甚至可以更简单。:)
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;
结果很简单:
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;