2017-05-10 20 views
0

如果在同一個月內存儲了多個具有相同商標名的記錄,我想從我的記錄中提取。sql oracle:列出在同一個月內具有重複次數超過N次的值的記錄

記錄的一個例子,我有

TradeID  Tradename   PrescDT 
------------------------------------------ 
1109   Panadol    sysdate-1 
1123   Opioids    sysdate-3 
1125   Doxycycline   sysdate-3 
1138   Panadol    sysdate-14 
1139   Panadol    sysdate-3 
1141   Panadol    sysdate-5 
1142   Codeine    sysdate-5 
1162   Opioids    sysdate-14 
1167   Codeine    sysdate-14 
1168   Prednisone   sysdate-14 
1170   Codeine    sysdate-21 
1172   Codeine    sysdate-22 

所以應該只有這一點,在這裏我只想

Tradename   PrescDT 
------------------------------ 
Panadol    sysdate-1 
Panadol    sysdate-14 
Panadol    sysdate-3 
Panadol    sysdate-5 

我一直在使用這一點,但收益嘗試過的商品名稱和日期還給我我所有的記錄至少在同一個月內重複三次,這不是我正在尋找的

SELECT Tradename, PrescDT 
FROM (
    SELECT p.*, COUNT(*) OVER (PARTITION BY TRUNC(PrescDT, 'MM')) AS c 
    FROM PRESCRIPTION p 
    ) p 
WHERE c > 3 
ORDER BY prescDT ASC; 
+0

SELECT商品名稱,PrescDT FROM MY_TABLE GROUP BY商品名HAVING COUNT(*)> 3 –

+0

'Codeine'也出現4次。爲什麼它沒有達到預期的結果? – Nitish

+0

@PavanKumarTS你如何選擇'PrescDT'而不在'GROUP BY'中? – Nitish

回答

3

您的查詢幾乎是正確的。您需要包括商品名進入PARTITION BY條款:

SELECT Tradename, PrescDT 
FROM (
    SELECT p.*, COUNT(*) OVER (PARTITION BY Tradename, TRUNC(PrescDT, 'MM')) AS c 
    FROM PRESCRIPTION p 
    ) p 
WHERE c > 3 
ORDER BY prescDT ASC; 
相關問題