首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有日期范围的数据,需要按月年报

有日期范围的数据,需要按月年报
EN

Stack Overflow用户
提问于 2018-08-31 07:02:51
回答 1查看 28关注 0票数 0

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

我需要每年报告这些数据,每个月,回答这个问题:对于给定的服务和月份,有多少人是预付费的?结果将是包含的,这意味着如果名称和服务组合在1天或更多天内达到一个月,则会报告它们。

使用SQL或SQL变体实现这一点的最佳方法是什么?

谢谢!

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

在:

Name,Service,Start,End jon,a,05/12/2018,08/26/2018 paul,b,06/05/2018,08/08/2018 michael,a,02/18/2018,08/15/2018 mary,a,04/22/2018,10/14/2018 jonas,b,05/10/2018,07/02/2018 thomas,a,08/05/2018,10/18/2018 jessica,c,03/09/2018,07/16/2018 arthur,c,02/03/2018,03/15/2018 hugo,c,06/07/2018,09/01/2018 larry,a,11/23/2018,12/20/2018 nick,b,08/23/2018,11/22/2018 beth,c,09/20/2018,12/25/2018 ashley,a,04/14/2018,05/19/2018 tim,a,01/05/2018,05/26/2018 allan,b,06/28/2018,12/11/2018 jeffrey,b,03/04/2018,04/22/2018 steven,b,01/20/2018,06/07/2018 dawn,c,06/15/2018,10/14/2018 brandy,b,09/01/2018,10/08/2018 christine,a,04/15/2018,07/31/2018

输出:

Service,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec a,1,2,2,5,6,4,4,4,2,2,1,1 b,1,1,2,2,2,4,3,3,3,3,2,1 c,0,1,2,1,1,3,3,2,3,2,1,1

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 07:21:15

您可以尝试使用条件聚合。对于2018年,这可能看起来像:

代码语言:javascript
复制
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];

我假设您想要不同的人数(一个人只计算一次,即使他们出现了多次)。如果不是这样,请卸下DISTINCT%s。

我进一步假设,如果服务周期仅与月份重叠,则需要进行计数。如果您只想计数,如果该期间完全包含在一个月中,请将条件更改为:

代码语言:javascript
复制
[start] >= <first of month>
AND [end] < <first of next month>

(替换<first of month><first of next month>。)

顺便说一句,人们是按名字命名的,这是一个坏主意。你怎么知道是一个人还是多个人,是否有更多的"John Smith“?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52106471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档