2012-11-09 4 views
0

나는 테이블과 같이 있습니다그룹 탠덤 기록

여기
|  A |  B | 
----------------- 
| 22.1 | 15.8 | 
| 12.15 | 4.55 | <- Duplicate record 
| 12.15 | 4.55 | <- Duplicate record 
| 12.15 | 4.55 | <- Duplicate record 
| 30.4 | 44.12 | 
| 10.5 | 7.58 | 
| 31.2 | 65.1 | <- Duplicate record 
| 31.2 | 65.1 | <- Duplicate record 
| 9.4 | 7.8 | 
| 12.15 | 4.55 | <- Same Duplicate record 
| 12.15 | 4.55 | <- Same Duplicate record 
| 12.15 | 4.55 | <- Same Duplicate record 
| 31.2 | 65.1 | <- Same Duplicate record 
| 31.2 | 65.1 | <- Same Duplicate record 

나는 그룹 AB 싶어요. 하지만 탠덤 값을 그룹화하려고합니다.
두 개의 동일한 레코드 사이에 다른 레코드가 있으면 두 레코드 (동일)가 있어야합니다.

예 : 내가 노력하고 있어요 것은

|  A |  B | 
----------------- 
| 22.1 | 15.8 | 
| 12.15 | 4.55 | <- Group 1 
| 30.4 | 44.12 | 
| 10.5 | 7.58 | 
| 31.2 | 65.1 | <- Group 2 
| 9.4 | 7.8 | 
| 12.15 | 4.55 | <- Group 3 (Second Time) 
| 31.2 | 65.1 | <- Group 4 (Second Time) 

: 내 예상 출력해야

SELECT * FROM MyTable 
GROUP BY A,B 

그러나 그것은 나에게 잘못된 결과를 제공합니다

|  A |  B | 
----------------- 
| 22.1 | 15.8 | 
| 12.15 | 4.55 | 
| 30.4 | 44.12 | 
| 10.5 | 7.58 | 
| 31.2 | 65.1 | 
| 9.4 | 7.8 | 
Here `12.15` and `31.2` is skipped second time. But I want it. 

주, 나는 this question 읽기하지만 솔루션이 제공됩니다 PHP에서 나는 MySQL에서 그것을 원한다.
this SQLFiddle에서 문제를 해결하려고합니다.

+0

@Downvoter, 내 노력에서 어떤 문제가 있습니까? – aditya

답변

2

열에 순차적 ID가 있습니까? 그렇다면, 당신은 뭔가를 시도 할 수 있습니다 :

SELECT t.A, t.B 
FROM myTable t 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM myTable t2 
    WHERE t2.A = t.A 
    AND t2.B = t.B 
    AND t2.Id = (SELECT MIN(t3.Id) FROM myTable t3 WHERE t3.Id > t.Id) 
) 

SQL Fiddle example


당신은 ID가없는 경우 다음을 시도,하지만 당신은 얻을 것이다 보장은 없습니다 기억 원하는 결과; 서버가 당신에 의해 주문 열을 지정하지 않으면이 원하는 임의의 순서로 결과를 반환 할 수 있습니다

SELECT t.A, t.B 
FROM 
(
    SELECT @curRow := @curRow + 1 AS Id, A, B 
    FROM myTable 
    JOIN (SELECT @curRow := 0) r ON 1=1 
) t 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM (
     SELECT @curRow2 := @curRow2 + 1 AS Id, A, B 
     FROM myTable 
     JOIN (SELECT @curRow2 := 0) r ON 1=1 
    ) t2 
    WHERE t2.A = t.A 
    AND t2.B = t.B 
    AND t2.Id = (
     SELECT MIN(t3.Id) 
     FROM (
      SELECT @curRow3 := @curRow3 + 1 AS Id, A, B 
      FROM myTable 
      JOIN (SELECT @curRow3 := 0) r ON 1=1 
     ) t3 
     WHERE t3.Id > t.Id 
    ) 
) 

SQL Fiddle example

+0

아, 그게 내가 ID와 같은 다른 칼럼을 가지고 있지 않은 주된 문제입니다. – aditya

+0

@aditya 타임 스탬프도 없습니까? 이 경우 결과에 대한 주문을 보장 할 수있는 방법이 없습니다. 서버가 원한다면 원하는 순서대로 행을 반환 할 수 있습니다. 지정된 순서대로 행을 제공해야한다는 계약이 없습니다. –

+0

값을 선택할 때'Row_number'와 같은 것을 추가 할 수 없습니까? – aditya