sql oracle:当同一个月内存储的记录数超过N个时列出记录

时间:2017-05-10 03:38:42

标签: sql oracle

编辑:我意识到我之前发布的问题是寻找不同的东西,而不是在同一个月内至少有N条记录,我需要在同一个月内保存相同值的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;

1 个答案:

答案 0 :(得分:0)

您可以使用窗口函数count来计算每个月的行数,并根据该计数进行过滤以获得所需的结果:

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