2011-11-01 4 views
1

두 개의 테이블이 있습니다. 첫 번째는 가입자입니다. 구독자도 범주에 임명됩니다. 두 번째 테이블은 가입자가 만든 지불입니다. 평균 시간이 구독 시간과 구독자의 첫 지불 사이에 무엇인지 알고 싶습니다 (여러 개 만들 수 있음). 여기 구독에서 결제까지 평균 시간을 받으십시오.

는 SQL의 조각이지만, 내가 아직 원하는 것을하지 않습니다 - 내가 가까이있어 느낌이 있지만, 지금은)

SELECT category, 
AVG(TIMESTAMPDIFF(HOUR, subs.timestamp, MIN(payments.timestamp))) 
FROM subs 
JOIN payments ON (payments.user_id = subs.user_id) 
GROUP BY category 

을 내가 "그룹 함수의 잘못된 사용을 얻을 "- MIN 기능으로 인해 올바르지 않습니다. 지금 무엇을해야합니까? 미리 감사드립니다! 이 쿼리의 결과를 다른 테이블을 업데이트하기 위해 필요한 경우

답변

2
SELECT category, 
AVG(TIMESTAMPDIFF(HOUR, subs.timestamp, p.timestamp)) 
FROM subs 
JOIN (SELECT user_id 
      , min(timestamp) timestamp 
     FROM payments 
     GROUP BY user_id 
    ) p 
ON p.user_id = subs.user_id 
GROUP BY category 

, 당신은 같은 것을 할 수있는 (테스트하지를, 그래서 거기에 구문 오류가있을 그러나 희망 당신은 아이디어를 얻을 수 있습니다). another_table에는 category 및 avg_hrs_spent 열이 있다고 가정합니다.

+0

나는 그 숫자가 올바른지 확인하기 위해 많은 추가 쿼리를해야한다고 생각한다. 하나의 질문 : MIN (타임 스탬프) 타임 스탬프는 정확히 무엇을 하는가? –

+0

위의 쿼리에서 각 user_id의 최소 타임 스탬프를 가져옵니다. 그런 다음 모든 사용자 _ID에서 각 카테고리에 대한 평균을 취할 수 있도록 subs.user_id에 대한 결과에 참여합니다. – dcp

+0

쿨! 이제이 쿼리의 결과와 함께 다른 테이블 (각 사용자 범주에 대한 다른 정보가 포함되어 있음)을 업데이트하려고합니다. 어떻게해야합니까? (또는 이것에 대한 새로운 질문을 게시해야합니까 ...) –

관련 문제