SQL:重构队列分析

SQL:重构队列分析,sql,postgresql,Sql,Postgresql,我正试图重构这个群组分析。因为我对SQL非常了解,所以我只知道基本知识,而且我今天必须完成它,我真的需要一些帮助。我们的团队中没有SQL开发人员,所有的后端开发人员都在休假。从周一开始我就一直在努力解决这个问题 我的任务是: 从users\u users表生成初始日期 为以下对象创建SQL: 每周登录 每周运营 这就是我所做的: SELECT time_table.*, ( WITH new_customers AS ( SELECT users_user.id FROM use

我正试图重构这个群组分析。因为我对SQL非常了解,所以我只知道基本知识,而且我今天必须完成它,我真的需要一些帮助。我们的团队中没有SQL开发人员,所有的后端开发人员都在休假。从周一开始我就一直在努力解决这个问题

我的任务是:

从users\u users表生成初始日期 为以下对象创建SQL: 每周登录 每周运营 这就是我所做的:

SELECT time_table.*, (
WITH new_customers AS (
    SELECT users_user.id
    FROM users_user
    INNER JOIN (
      SELECT user_id
      FROM users_userloginlog UL
      WHERE UL.created_at BETWEEN time_table.first_order_start AND time_table.first_order_stop
    ) AS period_orders ON period_orders.user_id = users_user.id
    GROUP BY users_user.id
    HAVING MIN(orders.paid_at) BETWEEN time_table.first_order_start AND time_table.first_order_stop
  )
SELECT 100 * COUNT(*)::float/(SELECT COUNT(*) FROM new_customers) as repeat_percent 
  FROM (
    SELECT COUNT(*), orders.user_id
    FROM orders
    INNER JOIN new_customers 
    ON new_customers.id = orders.UL
    WHERE orders.paid_at <= time_table.stop
    GROUP BY orders.user_id
    HAVING COUNT(*) > 1
  ) AS REPEATS
)
FROM (
  WITH time_serie AS (
    SELECT generate_series AS start,
      (generate_series + interval '1 month' - interval '1 second') AS stop
    FROM generate_series('2018-01-01 00:00'::timestamp, '2018-06-30', '1 month')
  ), first_order_serie AS (
    SELECT start AS first_order_start, stop AS first_order_stop
    FROM time_serie
)
SELECT * FROM time_serie, first_order_serie) AS time_table
它应该是这样的:

这是我们的桌子:

我已经尝试了下面所有的链接,但没有一个有效。我正在使用PostgreSQL


如果您使用的是PostgreSQL,那么为什么要标记sql server?