2014-05-07 49 views
0

事实记录中的多个日期

我有一个事实表,可以跟踪特定人群的多个操作和日期。我很难创建一个返回结果集的查询,我期望这个表。下面是该表的一个示例:

Record applicant_count applicant_date accepted_count accepted_date registered_count registered_date 
1  1 3   03/01/2014     
2  1 2   02/01/2014  1 3   03/01/2014  1 5    05/05/2014 
3  1 1   01/01/2014  1 5   05/01/2014  1 5    05/01/2014 
4  1 2   02/01/2014  1 4   04/15/2014  
5  1 4   04/01/2014     

有5条记录,用5个应用程序,3接受,和2条注册的记录为整个集合。我需要知道如何编写一个查询来计算特定日期的这些计数,例如4/20/2014。在那一天,我想让查询返回5个申请人,2个接受,0个注册。 任何帮助,将不胜感激。

+0

你想让计数成为前几天的总计,还是只对那一天的活动感兴趣? –

+0

我正在寻找基于给定日期的前几天所有日期的总计。我根据日期总结了部分记录的复杂性。例如,2014年4月的某个日期生成的任何查询都不应显示任何已注册的计数,因为这些事件发生在2014年5月。 – user3613294

回答

0

看你的样本数据,我不完全知道什么是对分组计数根据最新记录的条件。

这个充满工作示例,展示如何在聚合函数添加filter标准:

DECLARE @DataSource TABLE 
(
    [Record] TINYINT 
    ,[applicant_count] TINYINT 
    ,[applicant_date] DATETIME2 
    ,[accepted_count] TINYINT 
    ,[accepted_date] DATETIME2 
    ,[registered_count] TINYINT 
    ,[registered_date] DATETIME2 
) 

INSERT INTO @DataSource ([Record], [applicant_count], [applicant_date], [accepted_count], [accepted_date], [registered_count], [registered_date]) 
VALUES (1, 11, '03/01/2014', NULL, NULL, NULL, NULL) 
     ,(2, 12, '02/01/2014', 12, '03/01/2014', 11, '05/05/2014') 
     ,(3, 13, '04/05/2014', 13, '05/01/2014', 10, '05/01/2014') 
     ,(4, 14, '02/01/2014', 11, '04/05/2014', NULL, NULL) 
     ,(5, 15, '04/05/2014', NULL, NULL, NULL, NULL) 

DECLARE @Date DATETIME2 = '4/20/2014' 

SELECT SUM(IIF([applicant_date] = '4/05/2014', [applicant_count], 0)) AS [applicant_date] 
     ,SUM(IIF([applicant_date] = '4/05/2014', [accepted_count], 0)) AS [accepted_count] 
     ,SUM(IIF([applicant_date] = '4/05/2014', [registered_count], 0)) AS [registered_count] 
FROM @DataSource 

注重在SUM的条件:,

IIF([applicant_date] = '4/05/2014', [applicant_count], 0) 

这意味着,如果日期等于我们正在总结的结果,如果没有,加入0。你可以随意改变状态,只要你喜欢。

希望得到这个帮助。