2014-10-07 1 views
0

У меня есть эта таблица:удаление строк на основе стоимости предыдущей строки в той же таблице

LINE CONTENT      
245  Route selection data 
365  To be continued...   
367  --- END 
373  Route selection data 
424  --- END 
454  --- END 
462  PRA subscriber configuration 
491  --- END 
545  --- END 

мне нужно, чтобы удалить строки, в которых содержание имеет то же значение, что и предыдущую строка, но я не» t необходимо устранить все строки с одинаковым значением. Мне нужно сохранить строки, где значение CONTENT отличается от предыдущей строки. Других слов мне нужен стол, как это:

LINE   CONTENT      
    245  Route selection data 
    365  To be continued...   
    367  --- END 
    373  Route selection data 
    424  --- END 
    462  PRA subscriber configuration 
    491  --- END 

я не могу удалить на основе значения строки столбца, поскольку значение этого ежедневное изменение столбца. Мне нужно удалить записи на основе значений содержимого столбца.

ответ

3

Простым способом было бы использовать вложенный запрос с LAG, чтобы найти повторяющиеся строки и удалить их во внешнем запросе;

DELETE FROM mytable WHERE line IN (
    SELECT CASE WHEN content = LAG(content) OVER (ORDER BY line) THEN line END r 
    FROM mytable 
); 

An SQLfiddle to test with.

+1

[ 'LAG'] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions070.htm) - действительно аналитическая функция, которую нужно помнить! Я взял на себя смелость, чтобы добавить ссылку на соответствующую документацию. –

+0

Спасибо !!, работает отлично. – Joseleg

0

Вот другой подход, предполагая, что line является уникальным:

delete from thistable 
    where line not in (select min(line) from thistable group by content); 
Смежные вопросы