2014-09-17 3 views
0

그래서이 문제가 있습니다. 이미 변수를 그룹화했다고 가정 해 봅시다. 반복되는 그룹에서 첫 번째 그룹을 선택하려고합니다. 실버는 페인트로 변경하기 전에 때 - - 블루 따라서 날짜가 페인트에 대한 1999/12/23됩니다 - 실버SQL- 변수 그룹화 및 반복 그룹의 첫 번째 그룹의 마지막 행 선택

ProductID Name        Dates 
----------- ---------------------------------- ---------- 
491   Paint - Silver      1999/08/1   
491   Paint - Silver      1999/12/23   
491   Paint - Blue      2000/1/1   
491   Paint - Silver      2001/1/1  
491   Paint - Red      2001/1/21   
491   Paint - Red      2001/1/25   
491   Paint - Silver      2002/3/4   
491   Paint - Blue      2003/4/14   
491   Paint - Blue      2003/4/15   
491   Paint - Blue      2004/3/26   
491   Paint - Red      2005/2/1   
491   Paint - Red      2005/5/1   
491   Paint - Yellow      2006/7/2   
491   Paint - Yellow      2009/1/1   
491   Paint - Black      2010/1/1   
491   Paint - Black      2011/1/3 

문제는, 나는 페인트를 선택합니다. 간단히 말해서 productID = 491의 다른 제품으로 변경되기 전에 첫 번째 제품의 마지막 날짜를 원합니다. 하나의 productID (즉, 491)에 대한 제품입니다. 나는 여러 제품 ID에 대해 이렇게하고 싶습니다. 모두 비슷한 형식입니다. 아무것도 작동하지 않는 것 같아서 도움이된다면

+0

은 당신이 지금까지 시도해 봤어을? –

답변

1

제품 이름의 변경 사항을 지적해야하는 쿼리입니다.

SELECT a.name, b.name, a.dates, b.dates , (a.row - b.row) as row_diff 
FROM 
(SELECT *, @rowa := @rowa + 1 AS row FROM product 
     CROSS JOIN (SELECT @rowa := 0) AS r) a 
LEFT JOIN 
(SELECT *, @rowb := @rowb + 1 AS row FROM product 
     CROSS JOIN (SELECT @rowb := 0) AS r) b 
ON a.dates < b.dates 
WHERE a.name != b.name AND (a.row - b.row) = -1; 

이것은 다음과 같은 결과 집합 줄 것이다 :

이 가 가
+--------------+--------------+------------+------------+----------+ 
| name   | name   | dates  | dates  | row_diff | 
+--------------+--------------+------------+------------+----------+ 
| Paint-Silver | Paint-Blue | 1999-12-23 | 2000-01-01 |  -1 | 
| Paint-Blue | Paint-Silver | 2000-01-01 | 2001-01-01 |  -1 | 
| Paint-Silver | Paint-Red | 2001-01-01 | 2001-01-21 |  -1 | 
| Paint-Red | Paint-Silver | 2001-01-25 | 2002-03-04 |  -1 | 
| Paint-Silver | Paint-Blue | 2002-03-04 | 2003-04-14 |  -1 | 
| Paint-Blue | Paint-Red | 2004-03-26 | 2005-02-01 |  -1 | 
| Paint-Red | Paint-Yellow | 2005-05-01 | 2006-07-02 |  -1 | 
| Paint-Yellow | Paint-Black | 2009-01-01 | 2010-01-01 |  -1 | 
+--------------+--------------+------------+------------+----------+ 
+0

나는이 쿼리를 작성하는 데 꽤 많은 시간을 보냈다. 그래서 당신의 목적을 해결할 수 있다면 답을 받아 들여주세요. – Subodh

0

나는 SQL에 능숙하지는 않지만 각 행을 아래의 것과 비교하여 다른 이름으로 변경하는 이름 목록을 반복 할 수는 없다. (또는 지정된 이름, 예 : 파란색 페인트) 차이가 발견되면 현재 행을 선택하십시오.

관련 문제