表如下所示:
ID    用户ID  模块名  难度系数 开始时间 结束时间  标示
ID   USERID  MODULENAME GRADE BEGINDATE  ENDDATE   FLAG
1     P001    ABCDEFG     2   2003-5-11  2008-9-9    N
2     P001    BBCDEFH     1   2004-5-11  2008-8-8    N
3     P001    CBCDEFI     3   2005-5-11  2008-9-9    N
4     P001    DBCDEFK     4   2006-5-11  2008-9-6    Y
5     P001    EBCDEFN     1   2007-5-11  2008-9-9    N
6     P001    FBCDEFM     5   2006-1-11  2008-9-9    N
7     P001    GBCDEFL     7   2006-2-11  2008-9-1    Y
8     P001    HBCDEFQ     1   2006-3-11  2008-8-1    N
9     P001    IBCDEFW     2   2006-4-11  2008-9-1    Y
10    P001    JBCDEFR     4   2004-5-11  2008-8-1    N
11    P001    KCDEFTF     5   2005-6-11  2007-6-9    Y
12    P001    LBCDEFY     8   2005-7-11  2006-6-1    Y
13    P001    LBCDEFY     5   2008-1-11  2008-12-1   Y
查询条件如下:
1.按用户统计开始日期或结束时间都在当前年的记录[分十二个月统计];
2.把每个任务的难度系数平均分配到每个月份。
3.如果是提前完成的任务,则将当前月以后的难度系数平均分配到前面的月中显示。
4.如果是正在进行没有超出结束时间的,也加上难度系数,如果没有按时完成,则不显示难度系数。

解决方案 »

  1.   

    查询条件一[必需是要求当前年2008年的]:
    USERID = 'P001' AND (BEGINDATE BETWEEN to_date('2008-01-01','yyyy-mm-dd') AND to_date('2008-12-31','yyyy-mm-dd') OR ENDDATE BETWEEN to_date('2008-01-01','yyyy-mm-dd') AND to_date('2008-12-31','yyyy-mm-dd'))
    查询条件二:
    在上面的基础上分月统计,然后将每个任务的难度系/总月数得到每个月的平均难度系数。
    然后将在该月的所有任务的平均难度系数累加得到该月的总难度系数。这个可以是一次查询一个月的,分十二次查询。
    查询条件三:
    统计已完成的任务。
    如果是提前完成,则将该任务的总度系数平均分配到又当前月含当前月以前的月中。后面的月份中不显示该难度系数。
    如果任务正在进行,并且没有超出结束时间。则在月份中累加上这个任务的难度系数。如果超出结束时间,则取消累加它的难度系数。