创建一周内活跃天数的分布。 SQL

Create a distribution of number of days active in a week. SQL

我在 SQL 中有一个 table 看起来像这样。

Date    CustomerID
1/1        12
1/3        32
1/3        42 
1/4        52
1/4        62  
1/5        75

我想创建一周内活跃 # 天的分布:创建一个 table 以显示有多少成员在 3/1-3/ 期间活跃了 1 天、2 天、3 天……7 天7.

Screenshot of desired result

我已经写了这个查询。有用吗?

SELECT COUNT (DISTINCT date) AS ‘#Days Active’, COUNT(DISTINCT memberID) AS ‘Count’ 
FROM User Table 
WHERE date BETWEEN ‘03/01/17’ AND 03/07/17 
GROUP by COUNT (DISTINCT date) 
ORDER BY COUNT (DISTINCT date) ASC;

如果我理解正确的话,您的 table 每个客户有多行。例如客户 12 在输入日期之间有一行,客户 32 在输入日期之间有 3 行。

首先需要按customerId分组得到activeDayCounts,然后按activeDays分组统计customer

select x.activeDays, count(1) count from (
  select CustomerID, count(1) activeDays from temp
  where Date between '2017-03-01' and '2017-03-07'
  group by CustomerID) x
group by x.activeDays

您可以使用 link https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=19a3187913985faef617d9110730feba

检查示例

如果我没有误解你的意思,代码如下: 这是一个两步查询: step1:获取每个成员的活跃天数 step2: 获取每种活跃天数的会员数。

SELECT active_days, count(*) AS member_cnt
  FROM(
       SELECT CustomerID, count(*) AS active_days
         FROM your_table_name
        GROUP BY CustomerID)a
 GROUP BY active_days