PLATDATE PLATTIME COUNT      
-------- -------- -----------
20060821 15                 7
20060821 16                 9
20060821 17                 2
20060821 18                 8
20060822 09                 3
20060822 10                 6
20060822 11                 8
20060822 14                 4
20060822 15                 3
20060822 17                 5
20060822 18                 1
20060823 14                 3
20060823 16                 6
20060823 17                 8
20060824 15                 7
20060824 18                 1
20060825 15                 4以上是数据库中的某个查询得到的结果,整个结果可以把它认为是一个list,每行就对应list中的一个bean。这个bean有count00-count23总共24个关于count的属性。
比如第一条记录的意思是:list中的第一个bean的属性count15=7,属性platdate="20060821",其他属性为null。
这个list并不是我要求的形式,我要返回的newlist应该含有比较少的元素,把上面这个list中相同日期的记录中的属性“合并”掉。newlist应该是
PLATDATE COUNT      
-------- -----------
20060821          26(比如这一行:这个bean中属性platdate="20060821",count15=7,count16=9,count17=2,count18=8)
20060822          30(...)
20060823          17(...)
20060824           8(...)
20060825           4(...)我说了半天可能没说明白!但是有哪位神能看懂一定要帮一下啊,先谢谢了!在线期盼中.

解决方案 »

  1.   

    在SQL中就可以消除重复的行啊
      

  2.   

    我想的笨方法是按日期分组 然后遍厉这个List
    对于相同日期的把对应属性赋值  完了再放到新List中。
    比如我new一个新的bean然后对相同日期属性的bean做循环。如果对应bean的非日期属性不为null的话就把相应的属性值赋给这个新bean。再把这个新的bean添加到newList中。
      

  3.   

    sql里面有个分组统计:
    group by
      

  4.   

    给个例子:group by 
    分组
    通用数据库具有基于表的特定列对数据进行分析的能力。 
    可按照在 GROUP BY 子句中定义的组对行进行分组。以其最简单的形式,组由称为分组列的列组成。 SELECT 子句中的列名必须为分组列或列函数。列函数对于 GROUP BY 子句定义的每个组各返回一个结果。下列示例产生一个列出每个部门编号的最高薪水的结果: 
    SELECT DEPT, MAX(SALARY) AS MAXIMUM
    FROM STAFF
    GROUP BY DEPT
    此语句产生下列结果: 
    DEPT MAXIMUM
    ------ ---------
    10 22959.20
    15 20659.80
    20 18357.50
    38 18006.00
    42 18352.80
    51 21150.00
    66 21000.00
    84 19818.00
    注意:计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)。 
    将 WHERE 子句与 GROUP BY 子句一起使用
    分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。例如: 
    SELECT WORKDEPT, EDLEVEL, MAX(SALARY) AS MAXIMUM
    FROM EMPLOYEE
    WHERE HIREDATE > '1979-01-01'
    GROUP BY WORKDEPT, EDLEVEL
    ORDER BY WORKDEPT, EDLEVEL结果为: 
    WORKDEPT EDLEVEL MAXIMUM
    -------- ------- -----------
    D11 17 18270.00
    D21 15 27380.00
    D21 16 36170.00
    D21 17 28760.00
    E11 12 15340.00
    E21 14 26150.00
    注意:在 SELECT 语句中指定的每个列名也在 GROUP BY 子句中提到。未在这两个地方提到的列名将产生错误。GROUP BY 子句对 WORKDEPT 和 EDLEVEL 的每个唯一组合各返回一行。 
    在 GROUP BY 子句之后使用 HAVING 子句
    可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP BY 子句后面包含一个 HAVING 子句。 HAVING 子句可包含一个或多个用 AND 和 OR 连接的谓词。每个谓词将组特性(如 AVG(SALARY))与下列之一进行比较: 
    该组的另一个特性 
    例如: 
    HAVING AVG(SALARY) > 2 * MIN(SALARY)
    常数 
    例如: 
    HAVING AVG(SALARY) > 20000
    例如,下列查询寻找雇员数超过 4 的部门的最高和最低薪水: 
    SELECT WORKDEPT, MAX(SALARY) AS MAXIMUM, MIN(SALARY) AS MINIMUM
    FROM EMPLOYEE
    GROUP BY WORKDEPT
    HAVING COUNT(*) > 4
    ORDER BY WORKDEPT
    此语句产生下列结果: 
    WORKDEPT MAXIMUM MINIMUM
    -------- ----------- -----------
    D11 32250.00 18270.00
    D21 36170.00 17250.00
    E11 29750.00 15340.00
    有可能(虽然很少见)查询有 HAVING 子句但没有 GROUP BY 子句。在此情况下,DB2 将整个表看作一个组。因为该表被看作是单个组,所以最多可以有一个结果行。如果 HAVING 条件对整个表为真,则返回选择的结果(该结果必须整个由列函数组成);否则不返回任何行。 
      

  5.   

    先谢谢大家这么热情!其实我的要求说的还算清楚,plattime在数据库中其实是记录一天24小时时间的,但是他在我做的这个任务中的作用是把与于他的值如00,01...23对应的,记录中的bean的属性如count00,count01...count23的进行修改。给你们再说得细我就更说不清楚了,因为用到公司的框架,很多细节无法说明白。只要按要求做就是了。
    我慢慢看看大家的解答,如果经过验证是对的就加分了。因为快下班了,如果试验某人的成功应该会在明天上班时送分。谢谢各位了!
      

  6.   

    List list=new ArrayList();
    String date="";
    while(rs.next()){
       MyBean my=null;
       if(date.equals(rs.getString("PLATDATE"))){
          my=(MyBean)list.get(list.size()-1);
          my.setCount(my.getCount()+rs.getInt("COUNT"));
       }else{
          date=rs.getString("PLATDATE");
          my=new MyBean();
          my.setCount(rs.getInt("COUNT"));
          my.setDate(date);
       }
       //给24个count赋值
       my.setCount00(rs.getInt("PLATTIME"));
    }
      

  7.   

    我们用的是displayTag1.1的显示框架,表格是自动生成的!不是拼凑<tr><td>出来的。
    而且做到一半了,我列那个数据库表仅仅是为了说明这个待处理的list的结构,而不是求sql语句。我们用到的sql语句是定好了的,放在框架的某配置文件中,我们只能对他产生的list进行过滤达到自己要求的结果,并不能修改这个sql语句。
      

  8.   

    谁会就给出点主意啊~
    说白了是对一个list的过滤,产生一个newlist,路过的高人仔细帮我看看啊
      

  9.   

    List list=new ArrayList();
    String date="";
    while(rs.next()){
       MyBean my=null;
       if(date.equals(rs.getString("PLATDATE"))){
          my=(MyBean)list.get(list.size()-1);
          my.setCount(my.getCount()+rs.getInt("COUNT"));
       }else{
          date=rs.getString("PLATDATE");
          my=new MyBean();
          my.setCount(rs.getInt("COUNT"));
          my.setDate(date);
       }
       //给24个count赋值
       my.setCount00(rs.getInt("PLATTIME"));
    }
    试试我给你的方法撒
      

  10.   

    问题已经解决。
    自己弄出来了,步骤比较烦琐,程序不方便贴上来。
    以上各位高人说得都不完全对,酌情散分吧。Thanks to lip009(深蓝忧郁),seesea10523。谢谢大家的帮忙。