2013-04-04 78 views
0

我試圖構建一個只顯示非唯一副本的查詢。我已經建立了一個查詢,顯示所有記錄來考慮:Oracle:通過...獲得非唯一的重複副本...有計數

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。

回答

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

+0

我試了一下馬上和repladed「your_query」與整個聲明,讓我所有的記錄(即一個與三聯內加入)。它似乎工作。非常感謝您的快速回答! – 2013-04-04 16:24:42

+1

很高興能有所幫助。如果你覺得這個答案很好,請考慮接受它http://stackoverflow.com/faq#howtoask – 2013-04-06 21:20:26