我在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天有多少成员处于活动状态。
我已经写了这个查询。它行得通吗?
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;
如果我不误解您的意思,代码如下所示:这是一个两步查询:步骤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
如果我正确理解您的表,则每个客户有多行。例如,客户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查看经典作品>