我在医学数据库里有一个表格:

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

我想计算每个病人的列:
IDAct   Historic      IDPatient  IDActPerPatient
1       2001-01-02    1          1
2       2001-01-01    2          1
3       2001-01-03    1          2

Act表包含具有每次修改动作历史的动作。(索引是一对(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

……这不管用!
当一个行为在历史上有多个版本时(对于一个在三个版本中有一个行为的患者,我有81个版本),我在IDActPerPatient中得到了大量的数据。
你知道问题从哪里来吗?

最佳答案

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

?

关于sql - MAX后COUNT个错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3698837/

10-12 00:42