2010-09-13 82 views
1

我有一個醫療數據庫中的表法:MAX後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,歷史))。 所以我很感興趣,最後的修改行爲:現在

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 

......這不行! 當一個行爲在歷史中有多個版本(對於在3個版本中有1個行爲的患者,我有81個)時,我在IDActPerPatient中獲得大量數字。

您是否知道問題的來源?

回答

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 

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