2015-11-19 67 views
2

目前,我有我的查询会计算与16id问题的患者:计数行 - 今年分组

SELECT 
    YEAR(pbd.date_created), 
    COUNT(*) 
FROM 
    patient_booking_data pbd inner join problems p on pbd.pid = p.pid 
WHERE 
    p.problem_list_id IN (16)  
GROUP BY 
    YEAR(pbd.date_created) 

这组患者基础上,今年这个数字便进入了我们的系统date_created

enter image description here

我试图找出有多少在同一年度内返回。

我已经试过这样的事情:

SELECT 
    YEAR(pbd.date_created), 
    COUNT(*) 
FROM 
    patient_booking_data pbd inner join problems p on pbd.pid = p.pid 
WHERE 
    p.problem_list_id IN (16) 
    AND pbd.pid IN (
     SELECT pid FROM patient_booking_data GROUP BY pid HAVING count(*) > 1 
    ) 
GROUP BY 
    YEAR(pbd.date_created) 

但是,这算pid(patient_id),如果他们已经重新进入,即使它是一个不同的年份系统。

patient_booking_data看起来像:

id | pid | booking_no | date_created  | release_date 
-------------------------------------------------------------------------------- 
1 | 565 | 12-3431  | 2012-08-10  | 2012-08-12 
2 | 1231 | 12-1125  | 2012-08-11  | 2012-08-28 
3 | 831 | 12-7897  | 2012-08-11  | 2012-08-11 
4 | 2365 | 12-1254  | 2012-09-02  | 2012-09-03 
5 | 565 | 12-5698  | 2012-10-10  | 2012-10-25 

任何帮助,将不胜感激。

+0

主查询中不会有简单的'HAVING count(*)> 1'吗? –

回答

1

查询下面将返回在同一年访问过​​两次或两次以上的患者:

SELECT 
    pbd.id, 
    YEAR(pbd.date_created), 
    COUNT(*) 
FROM 
    patient_booking_data pbd inner join problems p on pbd.pid = p.pid 
WHERE 
    p.problem_list_id IN (16)  
GROUP BY 
    YEAR(pbd.date_created), pbd.id 
HAVING COUNT(*) > 1 

您可以通过派生表做另一组由数每年这类病人的数量

SELECT COUNT(*), y FROM (
    SELECT 
     pbd.id, 
     YEAR(pbd.date_created) y 
    FROM 
     patient_booking_data pbd inner join problems p on pbd.pid = p.pid 
    WHERE 
     p.problem_list_id IN (16)  
    GROUP BY 
     YEAR(pbd.date_created), pbd.id 
    HAVING COUNT(*) > 1 
) t1 GROUP BY y