2017-05-10 29 views
1

編輯:我意識到我之前發佈的這個問題是尋找不同的東西,而不是至少有N記錄在同一個月月,我需要N個記錄在同一個月內保存相同的值。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 pres.Tradename, pres.PrescDT 
FROM PRESCRIPTION pres 
    GROUP BY pres.Tradename, pres.PrescDT 
    HAVING COUNT(TRUNC(pres.PrescDT, 'MM')) > 3; 
+0

您使用哪些DBMS? Informix的? – Brad

+0

另外,您不需要'WHERE'子句,因爲它總是如此。把它拿出來。 – Brad

回答

0

你可以使用窗口函數count來計數numbe在每個月的行和基於該計數篩選,以獲得所需的結果:

select tradename, prescDT 
from (
    select p.*, 
     count(*) over (partition by trunc(prescDT, 'MM')) as cnt 
    from prescription p 
    ) p 
where cnt >= 3; 
+0

@Monomoni - 這是因爲它們符合你的標準。看到這個例子 - http://rextester.com/HWO14​​107 – GurV

相關問題