2016-07-25 3 views
-1

내가이 기록이 테이블 (user_notes)이 있습니다반복 ID로 평균 행 수를 얻으려면 어떻게해야합니까?

Image Example

을 그리고 평균 체중 감소를 좀하고 싶습니다, 문제는 일부 사용자가 반복 값을 가지고있다. 예 : 1은 10kg 손실

User 1: weight 20kg 
User 1: weight 10kg --> Lost: 10kg 
User 2: weight 100kg 
User 2: weight 70kg --> Lost: 30kg 

Avg weight loss: 20kg <-- Expected result 

사용자, 사용자 2는 20kg을 잃었지만 나는 모든 사용자 ID에 대해이 작업을 수행하고 평균 체중 감소를 얻을 필요가있다.

어떻게하면됩니까?

+0

편집 질문을하고 테이블을 제공에 (여기에서 첫 번째와 마지막 주 얻을 수있는 사용자 수준에서 통합하여 하나의 방법입니다 질문)보다 적절한 샘플 데이터와 원하는 결과를 얻을 수 있습니다. –

+1

어떤 체중 측정이 '새로운'체중인지 '오래된 체중'인지 어떻게 알 수 있습니까? – Nicarus

+0

사용자의 행이 두 개 이상인 경우 (예 : 90,80,75? 이 사용자를 2 번 카운트 하시겠습니까 (10 및 5 체중 감량 -> 평균 7.5) 또는 15의 체중 감량을 사용 하시겠습니까? 80,85,75라면 어쩌지? – dnoeth

답변

1

여기에 도전하는 것은 각 사용자의 첫 번째와 마지막 가중치를 얻는 것입니다. 당신이 평균 체중 감량을 원하는 경우

select tt.iduser, tmax.weight as last_weight, tmin.weight as first_weight, 
     (tmax.weight - tmin.weight) as diff 
from (select iduser, min(week) as minw, max(week) as maxw 
     from t 
     group by iduser 
    ) tt join 
    t tmin 
    on tmin.iduser = tt.iduser and tmin.week = tt.minw join 
    t tmax 
    on tmax.iduser = tt.iduser and tmax.week = tt.maxw; 

:

select avg(tmax.weight - tmin.weight) 
from (select iduser, min(week) as minw, max(week) as maxw 
     from t 
     group by iduser 
    ) tt join 
    t tmin 
    on tmin.iduser = tt.iduser and tmin.week = tt.minw join 
    t tmax 
    on tmax.iduser = tt.iduser and tmax.week = tt.maxw 
where maxw <> minw; 
+0

어쩌면 단지 일주일의 사용자가 여전히 결과에 포함될 것이라는 메모를 추가 할 것입니다 ('diff' == 0)? – Nicarus

+0

@ Nicarus. . . 좋은 생각이야. –

관련 문제