sql - 指定时间段内程序中的 SQL 循环人数
问题描述
我不确定是否应该有一个循环或者最简单的方法是什么。
我的数据包含参与我们计划的人员列表。他们有不同的开始和结束日期,但以下等式能够捕捉到在特定日期参与的人数:
DECLARE @PopulationDate DATETIME = '2018-06-01 05:00:00';
select count(People)
FROM Program_Log
WHERE
START_TIME <= @PopulationDate
AND (END_TIME >= @PopulationDate OR END_TIME IS NULL)`
有没有一种方法可以循环输入不同的日期值来获取一整年每天的计划参与者数量?多年?
解决方案
一种简单的方法是使用 CTE 生成日期,然后使用 aleft join
引入数据。例如,以下获取今年第一个月的计数:
with dates as (
select cast('2018-01-01' as date) as dte
union all
select dateadd(month, 1, dte)
from dates
where dte < getdate()
)
select d.dte, count(pl.people)
from dates d left join
program_log pl
on pl.start_time <= d.dte and (pl.end_time >= d.dte or pl.end_time is null)
group by d.dte
order by d.dte;
请注意,这对于少数几个日期最有效。如果要超过 100 个,则需要添加option (maxrecursion 0)
到查询的末尾。
而且,count(people)
疑点重重。也许你的意思是sum(people)
或类似的东西。
推荐阅读
- scala - IntelliJ 和 sbt 同步/其他功能突然停止工作
- r - 计算多项式的拟合值。需要汇总吗?如何制作通用的?
- c++ - 以编程方式配置和链接 C++ 项目
- php - 在 Azure Web 服务中授予 Python 文件的权限
- apache-spark - Pyspark 性能:dataframe.collect() 非常慢
- python - 如何将一行 CSV 传递到验证对象中 - 每次调用对象时都有一行
- python-3.x - 如何从文件中生成字节数组?
- python - 按特定列排序,但将具有相同主索引的项目放在一起
- python - 如何更改没有文本的表格中所有单元格的字体大小?
- python - 如何检测我的两个图像是否在 Pygame 中接触?