2012-11-03 13 views
5

Mam tabeli mysql jak poniżejCzy istnieje funkcja analityczna w mysql, aby rozwiązać ten problem?

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

chcę mieć wynik dowiedzieć ile razy każdy przedsiębiorca zwiększoną lub zmniejszoną cenę jak poniżej

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 jest kolumna, która pozostaje w tyle oryginalna cena kolumny. Muszę mieć flagę mówiąc, że w określonym czasie przedsiębiorca zwiększyć lub zmniejszyć cenę w powyższym przypadku ostateczny wynik jest

przedsiębiorca abc wzrosła cena dwukrotnie przedsiębiorca xyz zwiększona tych cen i zmniejszyła ones cenę

+0

W MySQL nie ma funkcji analitycznych, więc nie. Są jednak różne sposoby. Wydaje się, że nie tracisz ceny, jak opisujesz. Nie jest to robione na jednego handlowca, ale na cały zestaw wyników. Czy to jest zamierzone? – Ben

+2

możliwy duplikat funkcji [Simulate lag w MySQL] (http://stackoverflow.com/questions/11303532/simulate-lag-function- in-mysql) –

+0

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

Odpowiedz

0

Widzę, że zadałeś to pytanie w inny sposób na stanowisku: Compare rows in same table in mysql

Mimo to, oto rozwiązanie dla powyższego: (zakładając, że twoja tabela nazywa się "tab", a identyfikatory faktycznie zmniejszają się, a więc "opóźnienie" oznacza "przed "jak wygląda w przykładowych danych)

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 

Możesz zobaczyć szczegóły, dlaczego to działa w mojej odpowiedzi na twoje inne pytanie.

Mam nadzieję, że to pomoże!

john ...

Powiązane problemy