Sql 具有日期范围的数据,需要按月每年报告

Sql 具有日期范围的数据,需要按月每年报告,sql,aggregate,Sql,Aggregate,我正在开发一个数据集,其中包含服务列表的预付款数据。结构为:名称、服务、服务开始(日期)、服务终止(日期) 我需要每年每月报告这些数据,回答以下问题:对于给定的服务和月份,预付多少人?结果将是包容性的,这意味着如果一个名称和服务组合在一个月内出现1天或更长时间,则会报告它们 使用SQL或SQL变体实现此目的的最佳方法是什么 谢谢 输入和输出数据示例如下: 在: 名称、服务、开始、结束 乔恩,a,2018年5月12日,2018年8月26日 保罗,b,2018年5月6日,2018年8月8日 迈克尔,

我正在开发一个数据集,其中包含服务列表的预付款数据。结构为:名称、服务、服务开始(日期)、服务终止(日期)

我需要每年每月报告这些数据,回答以下问题:对于给定的服务和月份,预付多少人?结果将是包容性的,这意味着如果一个名称和服务组合在一个月内出现1天或更长时间,则会报告它们

使用SQL或SQL变体实现此目的的最佳方法是什么

谢谢

输入和输出数据示例如下:

在:
名称、服务、开始、结束
乔恩,a,2018年5月12日,2018年8月26日
保罗,b,2018年5月6日,2018年8月8日
迈克尔,a,2018年2月18日,2018年8月15日
玛丽,a,2018年4月22日,2018年10月14日
jonas,b,2018年10月5日,2018年2月7日
托马斯,a,2018年5月8日,2018年10月18日
杰西卡,c,2018年9月3日,2018年7月16日
arthur,c,2018年3月2日,2018年3月15日
雨果,c,2018年7月6日,2018年1月9日
拉里,a,2018年11月23日,2018年12月20日
尼克,b,2018年8月23日,2018年11月22日
贝思,c,2018年9月20日,2018年12月25日
阿什利,a,2018年4月14日,2018年5月19日
蒂姆,a,2018年5月1日,2018年5月26日
艾伦,b,2018年6月28日,2018年12月11日
杰弗里,b,2018年4月3日,2018年4月22日
史蒂文,b,2018年1月20日,2018年6月7日
黎明,c,2018年6月15日,2018年10月14日
布兰迪,b,2018年1月9日,2018年8月10日
克里斯蒂娜,a,2018年4月15日,2018年7月31日

输出:
服务,一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月
a、 1,2,2,5,6,4,4,2,2,1,1
b、 1,1,2,2,2,4,3,3,3,2,1

c、 0,1,2,1,1,3,3,2,3,2,1,1

您可以尝试使用条件聚合。2018年的情况可能如下:

SELECT [service],
       count(DISTINCT
             CASE
               WHEN [start] < '2018-02-01'
                     OR [end] >= '2018-01-01' THEN
                [name]
             END) [jan],
       count(DISTINCT
             CASE
               WHEN [start] < '2018-03-01'
                     OR [end] >= '2018-02-01' THEN
                [name]
             END) [feb],
       ...
       count(DISTINCT
             CASE
               WHEN [start] < '2019-01-01'
                     OR [end] >= '2018-12-01' THEN
                [name]
             END) [dec]
       FROM [elbat]
       GROUP BY [service];
(更换


顺便说一句,用名字来称呼这些人是个坏主意。您如何知道,如果是一个人或多个人,是否有更多的“John Smith”?

您能否提供一些示例数据和预期结果?您使用的是什么DBMS?我可以使用SQL Server或Vertica,sticky bitYes,D-Shih。我正在处理一个样本集/结果。原始帖子中添加了样本数据。同意命名评论。该名称未报告,并在实际实现中进行了编码。我需要创建一份年度报告,按月份和服务细分。我添加了一个样本集来反映我想要的结果。谢谢你的想法@AndrewGlenn:我会根据你的编辑来编辑答案。谢谢,sticky bit。我很感激。:)
[start] >= <first of month>
AND [end] < <first of next month>