MAX后COUNT时出错?

时间:2010-09-13 08:33:18

标签: sql mysql count

我在医疗数据库中有一个表格法:

IDAct   Historic      IDPatient
1       2001-01-01    1
1       2001-01-02    1
2       2001-01-01    2
3       2001-01-03    1

我想计算列IDActPerPatient:

IDAct   Historic      IDPatient  IDActPerPatient
1       2001-01-02    1          1
2       2001-01-01    2          1
3       2001-01-03    1          2

法案表包含具有行为每次修改历史的法案。 (索引是对(IDAct,Historic))。 所以我对上次修改的行为感兴趣:

SELECT A.IDActe, MAX(Historic) AS Historic FROM Act A GROUP BY IDAct

现在,我想为每位病人编写法令。因此,我计算一个患者的IDAct小于或等于的行为数。 我已经使用上一个请求创建了一个LastAct视图,我尝试了这个:

SELECT DA1.*, COUNT(*) AS IDActPerPatient
FROM LastAct DA1
INNER JOIN LastAct DA2 ON DA1.IDPatient = DA2.IDPatient 
AND DA2.IDActe >= DA1.IDAct
GROUP BY DA1.IDAct

......哪个不行! 当一个行为在历史上有多个版本时,我会在IDActPerPatient中得到大量数字(对于一个有3个版本中有1个行为的患者,我有81个)。

你知道问题的来源吗?

2 个答案:

答案 0 :(得分:1)

SELECT A.IDActe,
       MAX(Historic) AS Historic,
       (SELECT COUNT(DISTINCT IDAct) FROM ACT B WHERE A.IDPatient=B.IDPatient)
FROM Act A
GROUP BY IDAct

答案 1 :(得分:0)

谢谢!我没有在选择中使用select,但它在这里真的很有帮助! 这是固定的请求:

SELECT A.IDAct, A.IDPatient, 
       MAX(Historic) AS Historic, 
       (SELECT COUNT(DISTINCT IDAct) FROM Act B WHERE A.IDPatient=B.IDPatient 
        AND A.IDAct>=B.IDAct) AS IDActPerPatient
FROM Act A
GROUP BY IDAct
相关问题