我正在尝试构建一个只显示非唯一重复项的查询。我已经构建了一个显示所有记录的查询:
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。
答案 0 :(得分:2)
您可以尝试这样的事情:
SELECT title, starttime, archnr
FROM (
SELECT title, starttime, archnr, count(*) over (partition by title) cnt
FROM (your_query))
WHERE cnt > 1