求来一SQL大神帮忙解决问题

假如有张表,里面有人员的id,活动开始日期和活动结束日期,现在我要查询
比如:2017-11-01到2017-11-30之间每天有活动的人数。
有没有不用多次查询数据库的方法?

id 应该和具体的某天对应吧,不然无法分组统计

按日期分组呗,筛选2017-11-01到2017-11-30之间的人 select count(1) from table group by time having .........

select day,count(distinct id) from table where 2017-11-01到2017-11-30 group by day

 select count(*) from 表名 where  日期字段 between 2017-11-01 and  2017-11-30  order by  日期字段

即查询日期在 2017-11-01到2017-11-30之间的(日期字段 between 2017-11-01 and 2017-11-30 ),然后分组 (order by 日期字段),查询人数count(*)

SELECT C.日期,SUM(C.人数) as 人数 from
(
SELECT A.*,CASE WHEN A.日期 BETWEEN B.活动开始时间 AND B.活动结束时间 then 1 else 0 end as 人数 FROM (SELECT DateAdd(day,number,'2017-11-01') as 日期
FROM master..spt_values

WHERE type = 'p'

AND number <= DateDiff(day,'2017-11-01','2017-11-30') ) as A,表名 AS B) AS C group by C.日期

WITH t2 AS (SELECT DATEADD(DAY,num,'20171101') AS d FROM #tempNum
WHERE num <=DATEDIFF(DAY,'20171101','20171130'))
SELECT SUM(id) FROM t1 RIGHT JOIN t2
ON t1.startDate = t2.d
GROUP BY startTime

我这里用了一个数字表,先构建一个表表达式,查出每一天,然后在进行右边查询,然后就会显示出每一天时间内的活动人数

不知道我是不是跑题了图片说明

select CONVERT(nvarchar(50), dates,23) as createon,COUNT(1) as counts
from (select * from A where dates between '2017-11-01' and '2017-11-30') as a
group by CONVERT(nvarchar(50), dates,23)

不知道我的想法跟你的想法是否一致,如果说有那一天没人参加活动,那么我这个查询是没有值得,你可以定义一个表,然后关联我这个查询结果,那应该可以得到你说的每天有多少人活动

用一个xml文件统计一下访问人数。有一个人访问你就往文件里加一不就行了。

select day(日期字段) as 日期, count(*)as 访问次数, count(distinct 用户ID) as 访问人数 from 表名 where 日期字段 between ‘2017-11-01’ and ‘2017-11-30‘ order by 日期字段

select day,count(distinct id) from table where 2017-11-01到2017-11-30 group by day