postgresql devtodev -修改查询以基于声明的变量聚合值

cig3rfwq  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(63)

这是我的基本疑问:

SELECT 
  eventtime::date AS p_date, 
  SUM(CASE WHEN x = 1 THEN 1 ELSE 0 END) AS ABC
FROM 
  310189
GROUP BY 
 p_date
ORDER BY 
  p_date;

字符串
它输出一个像this这样的图表。
我想修改这个查询,根据声明的变量的值聚合ABC的值。例如,如果变量设置为7,它将以每周为基础聚合(7天分组)。
我知道如何声明变量:
延迟@aggregation_days INT; SET @aggregation_days = 1
我不知道如何修改查询来解释它。
我试过使用case语句,但它不起作用。我也不认为这是最好的方法。
我也试过使用date_trunc函数,但不起作用。
是否可以使用generate_series函数来实现这一点?

laik7k3q

laik7k3q1#

在下面的查询中,我根据可变的天数(例如,每周分组为7天)将每条记录的eventtime调整为其聚合期的开始,然后相应地对数据进行分组和求和。

-- Replace 7 with whatever aggregation period you need
WITH params AS (
    SELECT 7 AS aggregation_days
)
SELECT
    date_trunc('day', (eventtime - INTERVAL '1 day' * (EXTRACT(DAY FROM eventtime)::int % (SELECT aggregation_days FROM params)))::date) AS p_date_start,
    SUM(CASE WHEN x = 1 THEN 1 ELSE 0 END) AS ABC
FROM
    310189
GROUP BY
    p_date_start
ORDER BY
    p_date_start;

字符串

相关问题