2012-11-03 11 views
5

나는 각 상인 증가 또는이 문제를 해결하기 위해 mysql에 분석 함수가 있습니까?

id trader price lagged_price flag 
111 abc 5 
222 xyz 5.20 5   
333 abc 5.70 5.20  increased 
444 xyz 5  5.70  increased 
555 abc 5.20 5   reduced 
        5.20  increased 

lagged_price 아래로 가격 감소 횟수를 찾기 위해 결과를 갖고 싶어

id trader price 
111 abc 5 
222 xyz 5.20 
333 abc 5.70 
444 xyz 5 
555 abc 5.20 

아래 지연 열 수있는 MySQL의 테이블처럼이 원래의 기둥 값. 나는 특정 시간에 상인이 증가 또는 최종 결과가

상인 ABC 증가 가격이 두 배 상인 XYZ는 가격 사람이 증가하고 가격 사람에게

+0

MySQL에는 분석 기능이 없으므로 없습니다. 이 방법 라운드가 있습니다. 당신은 비록 당신이 어떻게 설명하는지 가격에 뒤지는 것 같지 않습니다. 그것은 상인마다 수행되는 것이 아니라 전체 결과 집합에 대해 수행됩니다. 이것은 의도적입니까? – Ben

+2

[MySQL의 지연 기능 시뮬레이트] 가능한 복제본 (http://stackoverflow.com/questions/11303532/simulate-lag-function-in-mysql) –

+0

또는 http://stackoverflow.com/q/9894092/521799, http://stackoverflow.com/q/5483319/521799, ... etc –

답변

0

을 감소 위의 경우에 가격 감소한다는 플래그를 가질 필요가 나는 당신이이 질문을 우편으로 다르게 질문 한 것을 본다 : Compare rows in same table in mysql

그럼에도 불구하고 위의 해결책은 다음과 같다. (당신의 테이블이 '탭'이라고 가정하고 실제로 ID가 감소하기 때문에 '전에'는 '전에'를 의미한다. '로 표시됨)

SELECT a.id, a.trader, a.price, b.price as lagged_price 
    , case when a.price > b.price then 'increased' 
      when a.price < b.price then 'decreased' 
      else 'same' 
     end as flag 
    FROM tab a 
    JOIN tab b 
    ON a.trader = b.trader AND a.id > b.id 
    LEFT OUTER JOIN tab c 
    ON a.trader = c.trader AND a.id > c.id AND b.id < c.id 
WHERE c.id IS NULL 

왜 내 대답은 다른 질문에이 작품의 세부 정보를 볼 수 있습니다.

희망이 도움이됩니다.

john ...

관련 문제