2012-11-03 24 views
5

Tôi có một bảng mysql như dưới đâyCó chức năng phân tích trong mysql để giải quyết vấn đề này không?

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

Tôi muốn có một kết quả để tìm ra số lần mỗi nhà kinh doanh tăng hoặc giảm giá như sau

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 là cột mà chậm giá cột ban đầu. Tôi cần phải có một lá cờ nói rằng tại một thời điểm đặc biệt là các nhà kinh doanh tăng hoặc giảm giá trong trường hợp trên kết quả cuối cùng là

trader abc tăng giá gấp đôi trader xyz tăng những giá cả và giảm những giá

+0

Không có chức năng phân tích trong MySQL, vì vậy không. Có nhiều cách làm tròn điều này. Bạn dường như không tụt lại mức giá mà bạn mô tả. Nó không được thực hiện cho mỗi nhà giao dịch nhưng cho toàn bộ tập kết quả. Điều này có chủ ý không? – Ben

+2

có thể trùng lặp của [Mô phỏng hàm trễ trong MySQL] (http://stackoverflow.com/questions/11303532/simulate-lag-function-in-mysql) –

+0

Hoặc http://stackoverflow.com/q/9894092/521799, http://stackoverflow.com/q/5483319/521799, ... v.v. –

Trả lời

0

Tôi thấy bạn đã hỏi câu hỏi này một cách khác nhau tại bài đăng: Compare rows in same table in mysql

Tuy nhiên, đây là giải pháp cho điều trên: (giả sử bảng của bạn được gọi là 'tab' và ID thực sự giảm, và 'lag' có nghĩa là 'trước đây 'giống như trong dữ liệu ví dụ của bạn)

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 

Bạn có thể xem chi tiết lý do tại sao điều này hoạt động trong câu trả lời của tôi tại câu hỏi khác của bạn.

Hy vọng điều này sẽ hữu ích!

john ...

Các vấn đề liên quan