我在医学数据库里有一个表格:
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/