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