Вместо первого запроса вы можете использовать
SELECT DISTINCT * FROM roadCond
, которая извлечет все записи из таблицы, удалив все дубликаты.
Что касается внутреннего метода, этот запрос вернет все записи, которые имеют «дубликаты» с заменой start
и end
. Обратите внимание, что для каждой записи с «дубликатами» этот запрос будет возвращать как «оригинал», так и «копию».
SELECT DISTINCT * FROM roadCond WHERE EXISTS (
SELECT * FROM roadCond rc2 WHERE
roadCond.road = rc2.road AND
roadCond.end = rc2.start AND roadCond.start = rc2.end AND
roadCond.cond = rc2.cond AND
... AND
roadCond.timestamp = rc2.timestamp)
Редактировать: Чтобы обнаруживать и удалять «дубликаты» с заменой start
и end
, вы можете убедиться, что ваши данные всегда содержат эти значения, расположенные в одном и том же порядке:
UPDATE roadCond SET start = end, end = start WHERE end < start;
Но этот подход работает, только если не имеет значения, какой именно.