创建一周中活动天数的分布。 SQL

问题描述 投票:0回答:2

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

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

我想创建一周内活动的#天分布:创建一个表以显示在3 / 1-3 / 7的1天,2天,3天,…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;
sql distribution
2个回答
0
投票

如果我不误解您的意思,代码如下所示:这是一个两步查询:步骤1:获取每个成员的活动天数步骤2:获取每种活跃天数的会员数。

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

0
投票

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

首先,您需要按customerId分组以获取activeDayCounts,然后按activeDays分组以对客户进行计数

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

您可以通过链接https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=19a3187913985faef617d9110730feba查看经典作品>

© www.soinside.com 2019 - 2024. All rights reserved.