Oracle:使用group得到非唯一重复项...有计数

时间:2013-04-04 14:26:56

标签: oracle group-by duplicates subquery

我正在尝试构建一个只显示非唯一重复项的查询。我已经构建了一个显示所有记录的查询:

SELECT       tbl_tm.title, lp_index.starttime, musicsound.archnr
FROM         tbl_tm
INNER JOIN   musicsound on tbl_tm.fk_tbl_tm_musicsound = musicsound.pk_musicsound
INNER JOIN   lp_index ON musicsound.pk_musicsound = lp_index.fk_index_musicsound
INNER JOIN   plan ON lp_index.fk_index_plan = plan.pk_plan
WHERE        tbl_tm.FK_tbl_tm_title_type_music = '22' AND plan.airdate
             BETWEEN to_date ('15-01-13') AND to_date('17-01-13')
GROUP BY     tbl_tm.title, lp_index.starttime, musicsound.archnr 
HAVING COUNT (tbl_tm.title) > 0;

相应的结果集如下所示:

title                   starttime   archnrr
============================================
Pumped up kicks         05:05:37    0616866
People Help The People  05:09:13    0620176
I can't dance           05:12:43    0600109
Locked Out Of Heaven    05:36:08    0620101
China in your hand      05:41:33    0600053
Locked Out Of Heaven    08:52:50    0620101

它为我提供了在特定时间跨度内播放的音乐标题及其开始时间和存档ID。

我想要实现的是这样的:

title                  starttime    archnr
============================================
Locked Out Of Heaven   05:36:08     0620101
Locked Out Of Heaven   08:52:50     0620101

只剩下两列:两者共享相同的标题和存档号,但时间部分不同。增加'HAVING COUNT'值会给我一个零排 结果集,因为没有任何条目完全相同。

到目前为止我发现的是,这个问题的解决方案很可能会有一个嵌套的子查询,但我似乎无法完成它。任何有关这方面的帮助将不胜感激。

注意:我在Oracle 11g服务器上。我的用户具有只读权限。我在工作站上使用SQL Developer。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

SELECT title, starttime, archnr
FROM (
SELECT title, starttime, archnr, count(*) over (partition by title) cnt
FROM (your_query))
WHERE cnt > 1

Here is a sqlfiddle demo