Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正在计算分组时间大于1年的行_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 正在计算分组时间大于1年的行

Sql 正在计算分组时间大于1年的行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我目前有一个查询,用于统计id为16的患者: 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) 这根据患者进入我们的系统的年份对患者数量进行

我目前有一个查询,用于统计id为
16
的患者:

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\u created

我正在努力计算同一年内有多少人返回。

我试过这样的方法:

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
(患者id)

patient\u booking\u 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

任何帮助都将不胜感激。

以下查询将返回在同一年内就诊两次或两次以上的所有患者:

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
您可以通过在派生表上执行另一个group by来计算每年此类患者的数量

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

一个简单的
在主查询上有count(*)>1
不是很好吗?