2012-06-28 4 views
0

열 (브랜드, 이름, ID, 시간, 가격)이있는 테이블을 가져 와서 이전 행의 가격을 같은 행에 추가하려고합니다. 새 열 (브랜드, 이름, ID, 시간, 가격, 가격). 이 가격과 prev_price는 모두 정수입니다.여러 루프에서 다른 행의 요소를 결합하는 방법

제가 직면 한 과제는 내가 작업하고있는 데이터베이스가 각각 다른 변수를 호스트한다는 것입니다. 예 : 브랜드 A, B는 C, D 이름 : 1 - 50 (브랜드 각각 다른) ID : 80 - 브랜드 및 이름

예 표 300 (브랜드 또한 각각 다른)이 일정하게 유지 & 내가이 prev_price 요인이

 
brand name id time price prev_price 
A   25 80 1  103  NULL 
A   25 80 2  105  103 
A   25 81 1  24  NULL 
A   25 81 2  24  0 
A   25 81 3  14  -10 

사람이이 작업을 수행하는 방법을 추천 도와 드릴까요 포함시킬 것인가?

+1

어디에서 prev_price를 움켜 잡고 있습니까? 다른 테이블에서 그거 잡아 먹고 있니? 아니면 이전에 가격이 얼마인지를 찾기 위해 어떻게 든 시간을 되돌리려 고하고 있습니까? – Palladium

+0

나는 테이블에있는 값인 곳에 prev_price 열을 추가하려고합니다. 처음 엔트리가 없거나 t-1에 가격이없는 경우 NULL입니다. – user1489719

답변

0

을,이 시도 :

Select mytable.*, x.price AS prev_price 
FROM mytable LEFT JOIN 
    (SELECT * FROM mytable) AS x ON 
    mytable.id = x.id 
    AND mytable.brand = x.brand 
    AND mytable.name = x.name 
    AND mytable.time = x.time + 1 
0

내가 먼저, 다음 a를 prev_time 추출 시간에 자체 조인하게 트리플 각 (brand,name,id)에 대해 이전 time를 결정할 필요가 있다고 생각 :이 경우

SELECT mytable.*, prev.price AS prev_price 
FROM mytable 
    LEFT JOIN (
    SELECT mytable.*, MAX(t2.time) AS prev_time 
    FROM  mytable LEFT JOIN mytable AS prev ON 
      prev.brand = mytable.brand 
     AND prev.name = mytable.name 
     AND prev.id = mytable.id 
     AND prev.time < mytable.time 
    GROUP BY mytable.brand, mytable.name, mytable.id, mytable.time 
) AS pairs USING (brand, name, id, time) 
    LEFT JOIN mytable AS prev ON 
     prev.brand = pairs.brand 
    AND prev.name = pairs.name 
    AND prev.id = pairs.id 
    AND prev.time = pairs.prev_time 
관련 문제