2015-02-07 157 views
-1

這裏是我的表:如何獲取最早的日期sql的平均值?

CREATE TABLE Consultation (
idConsultation number, 
dateConsultation date NOT NULL, 
prixConsultation number(4,2), 
pouls number(3), 
size number(3), 
poids number(3), 
pressionSystolique number(3), 
pressionDiastolique number(3), 
idMedecin number(3), 
idPatient number(3), 
); 

患者可以在該表中出現超過一次,並諮詢有一個日期。

我想得到大小的平均值作爲結果,並尊重我們只能採取每個病人諮詢的較早日期的事實。

在此先感謝,這是我想出了,但沒有工作...

SELECT AVG(size) 
FROM Consultation 
WHERE dateConsultation = (SELECT MAX(dateConsultation) FROM Consultation); 
+4

列'taille'在哪裏? – walther 2015-02-07 18:22:31

+0

請說明一下,你想要一個特定的條件還是要彙總結果? – 2015-02-07 18:23:28

+1

不是很清楚你在這裏問什麼,也許你可以顯示一些樣本數據和預期的結果集 – 2015-02-07 18:23:46

回答

0

你想先拿到每idPatientmax(dateConsultation),然後用它來過濾您avg(size)select 。爲此,可以使用子查詢和inner join做:

select avg(c.size) as avgSizeLatestConsultation 
from Consultation as c 
    inner join (select 
        idPatient, 
        max(dateConsultation) as LatestConsultation 
       from Consultation 
       group by 
        idPatient) as d 
     on d.idPatient = c.idPatient 
     and d.LatestConsultation = c.dateConsultation 
+1

對!非常感謝 – maype 2015-02-07 18:51:55

0
WITH CTE AS 
(
SELECT * 
     , ROW_NUMBER() OVER (PARTITION BY idPatient ORDER BY dateConsultation) rn 
FROM Consultation 
) 
SELECT idPatient 
     ,AVG(size) Avg_Size 
FROM CTE 
WHERE rn > 1 
GROUP BY idPatient; 
+0

FROM關鍵字未找到,預計哪裏? – maype 2015-02-07 18:45:13

+0

您使用的是什麼RDBMS? SQL Server,MySql? – 2015-02-07 18:46:37

+0

Oracle,SQL Developper – maype 2015-02-07 18:47:34

0

鑑於本次測試數據:

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(1, 10, TO_DATE('01-FEB-2015', 'DD-MON-YYYY'), 1); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(2, 10, TO_DATE('02-FEB-2015', 'DD-MON-YYYY'), 3); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(3, 11, TO_DATE('03-FEB-2015', 'DD-MON-YYYY'), 1); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(4, 12, TO_DATE('04-FEB-2015', 'DD-MON-YYYY'), 1); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(5, 13, TO_DATE('05-FEB-2015', 'DD-MON-YYYY'), 1); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(6, 13, TO_DATE('06-FEB-2015', 'DD-MON-YYYY'), 2); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(7, 13, TO_DATE('07-FEB-2015', 'DD-MON-YYYY'), 3); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(8, 14, TO_DATE('08-FEB-2015', 'DD-MON-YYYY'), 1); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(9, 15, TO_DATE('09-FEB-2015', 'DD-MON-YYYY'), 1); 

INSERT INTO CONSULTATION (IDCONSULTATION, IDPATIENT, DATECONSULTATION, "size") 
    VALUES(10, 15, TO_DATE('10-FEB-2015', 'DD-MON-YYYY'), 12); 

下面的查詢產生正確的結果(AVG_SIZE = 1):

SELECT AVG("size") AS AVG_SIZE 
    FROM CONSULTATION 
    WHERE IDCONSULTATION IN (SELECT IDCONSULTATION 
          FROM CONSULTATION 
          WHERE (IDPATIENT, DATECONSULTATION) IN 
           (SELECT IDPATIENT, MIN(DATECONSULTATION) AS DATECONSULTATION 
            FROM CONSULTATION 
            GROUP BY IDPATIENT)); 

SQLFiddle here

分享和享受。

相關問題