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