gpt4 book ai didi

sql - postgresql 每月创建天数表

转载 作者:行者123 更新时间:2023-11-29 11:58:58 27 4
gpt4 key购买 nike

我正在尝试编写一个脚本,该脚本返回一个包含月份天数的月份列表。它引用了这个表

 CREATE TABLE generic.time_series_only (measurementdatetime TIMESTAMP WITHOUT TIME ZONE NOT NULL)

这只是一个按时间顺序排列的时间序列(在连接不同地方有间隙的数据表时非常有用,但你想要一个完整的时间序列作为你的输出,也许有更聪明的方法来做到这一点,但我还没有找到它还没有)。

SELECT date_part('year'::text, time_series_only.measurementdatetime) AS
measyear,
date_part('month'::text, time_series_only.measurementdatetime) AS
measmonth,
date_trunc('month'::text, time_series_only.measurementdatetime) +
'1 mon'::interval - date_trunc('month'::text,
time_series_only.measurementdatetime) AS days_in_month
FROM generic.time_series_only
GROUP BY date_part('year'::text, time_series_only.measurementdatetime),
date_part('month'::text, time_series_only.measurementdatetime)
ORDER BY date_part('year'::text, time_series_only.measurementdatetime),
date_part('month'::text, time_series_only.measurementdatetime);

但是我得到这个错误:

  ERROR:  column "time_series_only.measurementdatetime" must appear in the GROUP BY clause or be used in an aggregate function

我不能将此列放在 GROUP BY 子句中,因为那样我会得到 time_series_only 表中每个条目的结果,而且我想不出使用聚合函数获得相同结果的方法?非常欢迎任何建议:-)

最佳答案

在一对(年、月)上使用distinct。您可以将 time_series_only 表替换为函数 generate_series() ,例如:

select distinct on (date_part('year', d), date_part('month', d))
date_part('year', d) as year,
date_part('month', d) as month,
date_part('day', d) as days_in_month
from
generate_series('2016-01-01'::date, '2016-12-31'::date, '1d'::interval) d
order by 1, 2, 3 desc;

year | month | days_in_month
------+-------+---------------
2016 | 1 | 31
2016 | 2 | 29
2016 | 3 | 31
2016 | 4 | 30
2016 | 5 | 31
2016 | 6 | 30
2016 | 7 | 31
2016 | 8 | 31
2016 | 9 | 30
2016 | 10 | 31
2016 | 11 | 30
2016 | 12 | 31
(12 rows)

关于sql - postgresql 每月创建天数表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42306566/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com