我在医疗数据库中有一个表格法:
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个)。
你知道问题的来源吗?
答案 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