2013-06-11 2 views
0

EID (이벤트 ID) 및 start_time에 복합 기본 키가있는 테이블이 있습니다. 나는 참석이라는 또 다른 칼럼을 가지고있다.MySQL 테이블에서 반복되는 항목이 포함 된 계산

사용자는 이벤트 ID를 다시 사용하고 날짜를 변경하여 이벤트를 더 많이 사용하지만이 인스턴스에서는 데이터베이스에 새 라인을 만듭니다.

4 번째 열인 참석 값에서 이전 이벤트의 참석 값을 뺀 actual_attending을 만들고 싶습니다. ID가 이전 ID가 아닌 경우, C 럼은 널이 될 수 있습니다. 업데이트를 통해 어떻게 계산할 수 있습니까? http://sqlfiddle.com/#!2/43f2c5

+1

는 조언을 sqlfiddle – Strawberry

+0

지금 제공, 감사를 제공하는 것을 고려 : 여기

는 예로서 sqlfiddle이다. –

답변

0
update event e1 
set e1.actual_attending = (select e1.attending - e2.attending 
          from event e2 
          where e2.eid(+) = e1.previous_eid 
         ) 
+0

다음과 같은 오류 메시지가 나타납니다. SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 매뉴얼에서 올바른 구문을 찾으십시오. ') = e1.previous_eid '근처에서 사용하십시오 'at line 4 –

0
SELECT a.* 
    , a.attending-b.attending new_actual_attending 
    FROM 
    (SELECT x.* 
      , COUNT(*) rank 
     FROM event x 
     JOIN event y 
      ON y.eid = x.eid 
      AND y.start_time <= x.start_time 
     GROUP 
      BY eid, start_time 
    ) a 
    LEFT 
    JOIN 
    (SELECT x.* 
      , COUNT(*) rank 
     FROM event x 
     JOIN event y 
      ON y.eid = x.eid 
      AND y.start_time <= x.start_time 
     GROUP 
      BY eid, start_time 
    ) b 
    ON b.eid = a.eid 
    AND b.rank = a.rank - 1; 

    +-----+------------+-----------+------------------+------+----------------------+ 
    | eid | start_time | attending | actual_attending | rank | new_actual_attending | 
    +-----+------------+-----------+------------------+------+----------------------+ 
    | 1 | 2013-06-08 |  29 |    NULL | 1 |     NULL | 
    | 2 | 2013-06-09 |  72 |    NULL | 1 |     NULL | 
    | 2 | 2013-06-16 |  104 |    NULL | 2 |     32 | 
    | 3 | 2013-06-07 |  224 |    NULL | 1 |     NULL | 
    | 3 | 2013-06-14 |  222 |    NULL | 2 |     -2 | 
    +-----+------------+-----------+------------------+------+----------------------+ 

http://sqlfiddle.com/#!2/43f2c5/2

관련 문제