在我们公司中,我们的客户执行各种我们登录不同表的活动-面试出席,课程出席和其他常规活动。我有一个数据库视图,该视图合并所有这些表中的数据,从而为我们提供了如下所示的ActivityView。如您所见,有些活动重叠-例如,在参加面试时,客户可能正在执行简历更新活动。
+----------------------+---------------+---------------------+-------------------+
| activity_client_id | activity_type | activity_start_date | activity_end_date |
+----------------------+---------------+---------------------+-------------------+
| 112 | Interview | 2015-06-01 09:00 | 2015-06-01 11:00 |
| 112 | CV updating | 2015-06-01 09:30 | 2015-06-01 11:30 |
| 112 | Course | 2015-06-02 09:00 | 2015-06-02 16:00 |
| 112 | Interview | 2015-06-03 09:00 | 2015-06-03 10:00 |
+----------------------+---------------+---------------------+-------------------+
每个客户都有一个“注册日期”,记录在客户表上,即他们加入我们的计划之时。这是我们的示例客户端:
+-----------+---------------------+
| client_id | client_sign_up_date |
+-----------+---------------------+
| 112 | 2015-05-20 |
+-----------+---------------------+
我需要创建一个显示以下各列的报告:
+-----------+---------------------+--------------------------------------------+
| client_id | client_sign_up_date | date_client_completed_5_hours_of_activity |
+-----------+---------------------+--------------------------------------------+
我们需要这份报告,以便了解我们的计划的有效性。该计划的一个重要目的是让我们的每个客户尽快完成至少5个小时的活动。因此,此报告将告诉我们,从注册到注册,每个客户需要多长时间。
使我们更加棘手的是,当我们计算5个小时的总活动时,我们必须对重叠的活动进行打折:
在上面的示例数据中,客户在09:00至11:00之间参加了一次采访。在同一天,他们还从09:30到11:30进行了简历更新活动。对于我们的计算,这将使他们有2.5小时(150分钟)的一天的总活动量-我们只会算出30分钟的简历更新,因为面试将其更新到11:00。]
因此,我们的示例客户的报告将给出以下结果:
+-----------+---------------------+--------------------------------------------+ | client_id | client_sign_up_date | date_client_completed_5_hours_of_activity | +-----------+---------------------+--------------------------------------------+ | 112 | 2015-05-20 | 2015-06-02 | +-----------+---------------------+--------------------------------------------+
因此,我的问题是如何使用选择语句创建报告?我可以通过编写存储过程来解决该问题,该存储过程将遍历视图并将结果写入报告表。但是我更希望避免使用存储过程,而要使用select语句来为我提供即时报告。
我正在使用SQL Server 2005。
在我们公司中,我们的客户执行各种我们登录不同表的活动-面试出席,课程出席和其他常规活动。我有一个数据库视图,可以合并数据...