postgresql根据起止时间和结束时间按月周日统计上架价格

208 阅读1分钟

postgresql根据起止时间和结束时间按月周日统计上架价格

SELECT generate_series(start_time::date, end_time::date, '1 day'::interval) AS     generate_series, price FROM price_table 
分析
这个查询中,我们生成一个日期序列,从价格表中的每个记录的开始日期到结束日期,间隔为一天。然后,我们将生成的日期序列与对应的价格进行关联。

接下来,我们使用 date_trunc('week', generate_series) 函数将生成的日期序列转换为周的起始日期,并将其作为分组依据。然后,我们计算每周价格的波动,即最高价和最低价之差,并按周的起始日期进行排序。

如果您希望按月分组计算价格波动,您可以将上述查询中的 date_trunc('week', generate_series) 函数替换为 date_trunc('month', generate_series),以将生成的日期序列转换为月的起始日期进行分组。

请根据您的实际表结构和需求进行调整,并确保价格表中有足够的数据覆盖跨越多月多周的时间范围。这些查询可以作为起点,您可能需要根据您的具体情况进行更详细的数据处理和计算。

按月

SELECT date_trunc('month', generate_series) AS week_start, SUM(price) price FROM ( SELECT generate_series(start_time::date, end_time::date, '1 day'::interval) AS generate_series, price FROM price_table ) AS subquery GROUP BY week_start ORDER BY week_start;

按周

SELECT date_trunc('week', generate_series) AS week_start,SUM(price) price FROM ( SELECT generate_series(start_time::date, end_time::date, '1 day'::interval) AS generate_series, price FROM price_table ) AS subquery GROUP BY week_start ORDER BY week_start;

按日

SELECT date_trunc('day', generate_series) AS week_start, MAX(price) - MIN(price) AS price_fluctuation FROM ( SELECT generate_series(start_time::date, end_time::date, '1 day'::interval) AS generate_series, price FROM price_table ) AS subquery GROUP BY week_start ORDER BY week_start;