表中数据如下:
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
高手指点!谢谢!
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
高手指点!谢谢!
(
select V,SEARCHTIME,
count(1) over (patition by V order by SEARCHTIME desc) count
) t
order by t.count desc我没环境,你试一下吧
from(
select a.*,count(1) over (partition by v) num
from test a) aa
oreder by aa.num,aa.searchtime desc
/* 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
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
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