У меня есть таблица с столбцом, который может иметь одинаковые значения в пакете. Вот так:
+----+---------+
| 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
повторяются в примере.
EDIT:
Я достиг этого, используя это:
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)
Но это работает только тогда, когда идентификаторы являются последовательными. В случае пробелов между идентификаторами (удаленными) запрос прерывается. Как я могу это исправить?