【发布时间】:2013-01-12 22:44:20
【问题描述】:
条件:
Start date: 31-12-2012
End date: 01-04-2013
- 模块代表
project_id - 加载表示
module_start_date和module_end_date和user_id=6之间有40% 的空闲。
SELECT [user_id], module_id, module_start_date, module_end_date,
1 - loading_percentage loading
FROM module_user_master_map
WHERE module_start_date >= '2012-12-31'
AND module_end_date <= '2013-04-01'
AND [user_id]=6
使用此查询,我得到以下输出:
user_id | module_id | module_start_date | module_end_date | loading
-------------------------------------------------------------------
6 | 3 | 01-01-2013 | 31-01-2013 | 0.4
6 | 4 | 15-02-2013 | 28-02-2013 | 0.2
6 | 5 | 01-03-2013 | 15-03-2013 | 0.7
6 | 3 | 30-01-2013 | 30-01-2013 | 0.5
如果您仔细查看输出,您会发现用户在日期 01-02-2013 到 14-02-2013 期间 100% 可用,即他的负载为 1。
//更正上句中的日期。
我希望输出如下
user_id | module_id | module_start_date | module_end_date | loading
-------------------------------------------------------------------
6 | 3 | 30-01-2013 | 30-01-2013 | 0.5
6 | 3 | 01-01-2013 | 31-01-2013 | 0.4
6 | Null | 01-02-2013 | 14-02-2013 | 1
6 | 4 | 15-02-2013 | 28-02-2013 | 0.2
6 | 5 | 01-03-2013 | 15-03-2013 | 0.7
6 | Null | 16-03-2013 | 01-04-2013 | 1
我确实有一个函数,它可以给我从开始日期和结束日期开始的日期。
【问题讨论】:
-
你用 mysql 和 sql server 都标记了这个,你用的是什么 rdbms?
标签: sql-server sql-server-2008 tsql