Выберите только первую строку повторяющегося значения в столбце в SQL.

У меня есть таблица, в которой есть столбец, который может иметь одинаковые значения в пакете. Примерно так:

+----+---------+
| id |   Col1  | 
+----+---------+
| 1  | 6050000 |
+----+---------+
| 2  | 6050000 |
+----+---------+
| 3  | 6050000 |
+----+---------+
| 4  | 6060000 |
+----+---------+
| 5  | 6060000 |
+----+---------+
| 6  | 6060000 |
+----+---------+
| 7  | 6060000 |
+----+---------+
| 8  | 6060000 |
+----+---------+
| 9  | 6050000 |
+----+---------+
| 10 | 6000000 |
+----+---------+
| 11 | 6000000 |
+----+---------+

Теперь я хочу сократить строки, в которых повторяется значение Col1 , и выбрать только первое вхождение.
Для приведенной выше таблицы результат должен быть следующим:

+----+---------+
| id |   Col1  | 
+----+---------+
| 1  | 6050000 |
+----+---------+
| 4  | 6060000 |
+----+---------+
| 9  | 6050000 |
+----+---------+
| 10 | 6000000 |
+----+---------+

Как я могу сделать это в SQL?
Обратите внимание, что следует удалять только пакетные строки, а значения могут повторяться в не-пакетных строках! id = 1 & id = 9 повторяются в результате выборки.

РЕДАКТИРОВАТЬ:
Я добился этого с помощью этого:

select id,col1 from data as d1
where not exists (
    Select id from data as d2
    where d2.id=d1.id-1 and d1.col1=d2.col1 order by id limit 1)

Но это работает только тогда, когда идентификаторы являются последовательными. При пробелах между идентификаторами (удаленными) запрос прерывается. Как я могу это исправить?

10
задан Erwin Brandstetter 30 December 2011 в 21:47
поделиться