繁体   English   中英

如何写一个查询显示相关的记录增长,一周又一周?

[英]How to write a query showing associated record growth, week after week?

给定以下两个表和字段:

companies (id, created_at, title)
company_members (id, company_id, created_at, member_info)

我想写一个查询,显示company_members如何随着时间的推移而增长,从公司创建的那一周开始,然后每周显示直到当前一周。

期望结果示例:

所需数据示例

上面的示例应该显示,例如,在 12 月 6 日,在第 1 周创建了 100 个成员。 到第 2 周(现在有 110,110% 的成员)

任何关于如何获得这个或开始这个的建议都值得赞赏。 谢谢!

这是一个解决方案,用于计算从公司创建那周开始按 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM