[英]How to write a query showing associated record growth, week after week?
这是一个解决方案,用于计算从公司创建那周开始按 company_id 随时间推移的增长,然后逐周显示直到当前周:
WITH list AS
(
SELECT c.id AS company_id
, cm.created_at - mod((EXTRACT('dow' FROM cm.created_at) + 6) :: integer, 7) AS week -- first day of the week associated to cm.created_at
, count(*) AS count
FROM companies AS c
INNER JOIN company_members AS cm
ON cm.created_at >= c.created_at
GROUP BY c.id, week
)
SELECT l.company_id
, l.week
, to_char(sum(l.count) OVER w / first_value(l.count) OVER w, '99999V99 %') AS growth
FROM list AS l
RIGHT JOIN
( SELECT company_id
, generate_series(min(week), now() :: date , interval '7 days') AS week
FROM list
GROUP BY company_id
) AS w
ON w.company_id = l.company_id
AND w.week = l.week
WINDOW w AS (PARTITION BY l.company_id ORDER BY l.week)
ORDER BY l.company_id, l.week
在dbfiddle中查看测试结果。
您希望显示结果的方式是您的问题目前尚不清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.