昨天问过类似的,大家给了很好的答复,但是我忘了一个关键的地方:
如果字段A与B相同,那么将C的内容合并,并将其他的删除,例如:
A B C 
1 2 3 
1 3 4 
1 2 5
1 2 6
2 3 7
2 3 8
2 4 9
处理后剩余:
1 2 356 
1 3 4
2 3 78
2 4 9
大家都给了答案:
select a,b,replace(wm_concat(c),',','')
from tablename
group by a,b现在是:
有四列,前面三列都相同,第四列d是时间,
A,b ,c 功能和以前的一样,但是要保留一个时间就可以了,符合group a,b 的任何一个行的时间都可以。
select a,b ,,replace(wm_concat(c),',',''), d ........让我抓狂啊。谢谢。

解决方案 »

  1.   

    WITH tablename AS(
    SELECT 1 a, 2 b, 3 c ,SYSDATE d FROM dual UNION ALL   
    SELECT 1, 3, 4,SYSDATE-1 FROM dual UNION ALL   
    SELECT 1, 2, 5,SYSDATE-2 FROM dual UNION ALL
    SELECT 1, 2, 6,SYSDATE-3 FROM dual UNION ALL
    SELECT 2, 3, 7,SYSDATE-4 FROM dual UNION ALL
    SELECT 2, 3, 8,SYSDATE-5 FROM dual UNION ALL
    SELECT 2, 4, 9,SYSDATE-6 FROM dual
    )
    select a,b,replace(wm_concat(c),',',''),Max(d) d
    from tablename
    group by a,bA B  C         D
    -------------------------------
    1 2 356 2010.11.05 08:37:33
    1 3 4   2010.11.04 08:37:33
    2 3 78  2010.11.01 08:37:33
    2 4 9   2010.10.30 08:37:33
      

  2.   

    --试试这个
    select a,b,replace(wm_concat(c),',',''),max(d)
    from tablename
    group by a,b