2014-04-19 3 views
0

가격 테이블 :MySQL의 동적 덧셈과 뺄셈 행

date  | price 
------------------ 
2014-01-01 100 
2014-01-02 20 
2014-01-03 -30 
2014-01-04 70 
... 

IT는 SQL 쿼리와 결과 테이블을 표시 할 수 있습니까?

결과 테이블 :

date  | price | total 
-------------------------- 
2014-01-01 100  100 
2014-01-02 20  120 
2014-01-03 -30  90 
2014-01-04 70  160 
... 
  1. "결과 테이블은"
  2. "총"열은 이전과 덧셈과 뺄셈과 고객의 균형의 마지막 상태를 표시한다 그 단지 SQL 결과 존재 테이블 아니다 행

이 SQL 쿼리를 작성할 수 있습니까? 거의 표준 SQL을 사용하여

+0

예. 있을 수있다. – Strawberry

답변

1
select date, 
     price, 
     @total := @total + price as total 
from (select date, price 
     from your_table 
     order by date) x 
CROSS JOIN (select @total := 0) r 
1
select date, 
     @total := @total + price as running_total, 
     price 
from your_table, (select @total := 0) r 
order by date 
0

;

SELECT *, (SELECT SUM(price) 
      FROM pricetable p 
      WHERE p.date<=pricetable.date) total 
FROM pricetable 
ORDER BY date; 

An SQLfiddle to test with.

... 또는 왼쪽 가입 ...

SELECT *, SUM(p2.price) total 
FROM pricetable p1 
LEFT JOIN pricetable p2 
    ON p1.date >= p2.date 
GROUP BY p1.date, p1.price 
ORDER BY p1.date; 

Another SQLfiddle.

+0

좋은 제안이지만 큰 테이블 데이터에서 성능이 좋지 않다고 생각하십니까? :/ – MarsPeople

+0

@Kumul MySQL에는 분석 함수가 없으므로 필자는 이러한 쿼리의 성능이 최적이 아니라고 생각합니다. 나는 성능을 향상시킬 수있는 LEFT JOIN 대안을 추가했으나, 어느 것이 더 빠른지를 알려주는 유일한 방법은 그것을 시도하는 것입니다. –