表中数据如下:
V          SEARCHTIME
---------- -------------------
数学       2008-06-07 08:19:04
数学       2008-06-07 08:19:06
大学       2008-06-07 08:19:10
地震       2008-06-07 08:19:14
大学       2008-06-07 08:18:52
地震       2008-06-07 08:19:00
中国       2008-06-07 10:05:14我想选出V中重复次数最多的记录排在前面,如果重复次数最多的记录有多个,则会选出他们当中时间最近的那个记录放在前面,即按如下显示:地震       2008-06-07 08:19:14
地震       2008-06-07 08:19:00
大学       2008-06-07 08:19:10
大学       2008-06-07 08:18:52
数学       2008-06-07 08:19:06
数学       2008-06-07 08:19:04
中国       2008-06-07 10:05:14
高手指点!谢谢!

解决方案 »

  1.   

    select t.* from 
    (
    select V,SEARCHTIME,
           count(1) over (patition by V order by SEARCHTIME  desc) count
    ) t
    order by  t.count desc我没环境,你试一下吧    
      

  2.   

    select aa.v,aa.searchtime
    from(
         select a.*,count(1) over (partition by v) num
               from test a) aa
    oreder by aa.num,aa.searchtime desc
      

  3.   

    测试了下,修正了下错误
    /* Formatted on 2008/06/07 10:32 (Formatter Plus v4.8.8) */
    WITH TEST AS
         (SELECT '数学' v, '2008-06-07 08:19:04' searchtime
            FROM DUAL
          UNION ALL
          SELECT '数学', '2008-06-07 08:19:06'
            FROM DUAL
          UNION ALL
          SELECT '大学', '2008-06-07 08:19:10'
            FROM DUAL
          UNION ALL
          SELECT '地震', '2008-06-07 08:19:14'
            FROM DUAL
          UNION ALL
          SELECT '大学', '2008-06-07 08:18:52'
            FROM DUAL
          UNION ALL
          SELECT '地震', '2008-06-07 08:19:00'
            FROM DUAL
          UNION ALL
          SELECT '中国', '2008-06-07 10:05:14'
            FROM DUAL)
    SELECT   aa.v, aa.searchtime
        FROM (SELECT a.*, COUNT (1) OVER (PARTITION BY v) num,
                max(searchtime) OVER (PARTITION BY v) max_time
                FROM TEST a) aa
    ORDER BY aa.num desc, aa.max_time DESC结果
    Row# V SEARCHTIME1 地震 2008-06-07 08:19:00
    2 地震 2008-06-07 08:19:14
    3 大学 2008-06-07 08:19:10
    4 大学 2008-06-07 08:18:52
    5 数学 2008-06-07 08:19:06
    6 数学 2008-06-07 08:19:04
    7 中国 2008-06-07 10:05:14
      

  4.   

    应该还要加个排序条件,才是楼主需要的结果SELECT   aa.v, aa.searchtime
        FROM (SELECT a.*, COUNT (1) OVER (PARTITION BY v) num,
                max(searchtime) OVER (PARTITION BY v) max_time
                FROM TEST a) aa
    ORDER BY aa.num desc, aa.max_time DESC,aa.searchtime desc结果Row# V SEARCHTIME1 地震 2008-06-07 08:19:14
    2 地震 2008-06-07 08:19:00
    3 大学 2008-06-07 08:19:10
    4 大学 2008-06-07 08:18:52
    5 数学 2008-06-07 08:19:06
    6 数学 2008-06-07 08:19:04
    7 中国 2008-06-07 10:05:14
      

  5.   

    谢谢您的回复,不过我试了不对啊  1   select aa.v,aa.searchtime
      2   from(
      3        select t.*,count(1) over (partition by v) num
      4              from keywords t where username='sean') aa
      5*  order by aa.num,aa.searchtime desc
    SQL> /V          SEARCHTIME
    ---------- -------------------
    中国       2008-06-07 10:05:14
    地震       2008-06-07 08:19:14
    大学       2008-06-07 08:19:10
    数学       2008-06-07 08:19:06
    数学       2008-06-07 08:19:04
    地震       2008-06-07 08:19:00
    大学       2008-06-07 08:18:52