SQL窗口函数,用于在每日级别上统计不同的月份到日期

SQL窗口函数,用于在每日级别上统计不同的月份到日期,sql,Sql,我正在尝试获取一个查询,该查询将每天为我提供customerid的计数,但对当月是唯一的(例如,如果customerid在当月1日出现,我不希望在21日再次计数) 我希望输出类似于 日期 每月唯一的客户 2021-04-29 500 2021-04-30 523 2021-05-01 45 2021-05-02 55 2021-05-03 72 ... ... 如果你想要一个额外的列,那么你需要两个窗口函数。这个想法是统计用户在一个月内第一次出现的次数 您的代码看起来像Postgres,因此我将

我正在尝试获取一个查询,该查询将每天为我提供customerid的计数,但对当月是唯一的(例如,如果customerid在当月1日出现,我不希望在21日再次计数)

我希望输出类似于

日期 每月唯一的客户 2021-04-29 500 2021-04-30 523 2021-05-01 45 2021-05-02 55 2021-05-03 72 ... ...
如果你想要一个额外的列,那么你需要两个窗口函数。这个想法是统计用户在一个月内第一次出现的次数

您的代码看起来像Postgres,因此我将使用该语法:

SELECT DATE_TRUNC('day', date) AS day,
       DATE_TRUNC('month', date) AS month,
       COUNT(DISTINCT customerid) as customers_in_day,
       SUM(COUNT(*) FILTER (WHERE seqnum = 1)) OVER (ORDER BY DATE_TRUNC('day', date)) as customers_in_month
FROM (SELECT t.*,
             ROW_NUMBER() OVER (PARTITION BY customerid, DATE_TRUNC('day', date) ORDER BY day) as seqnum
      FROM table t
     ) t
GROUP BY 1, 2

用您正在使用的数据库标记您的问题。