0

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

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。

4

1 回答 1

2

You can try something like this:

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

于 2013-04-04T14:31:51.243 回答