2015-03-06 1 views
-1

У меня есть SQL, цель состоит в том, чтобы сохранить последние две записи и удалить верхние строки.Удалить верхнюю строку с помощью SQL

delete from table 
where RowID in (select top 10 RowID from table) 

Это удаляет все строки вместо первых строк, которые я намерен удалить.

В интерфейсе, который я использую, команда «WITH» не работает. Это должно быть что-то вроде вышеупомянутого запроса.

У меня есть стол с 3 колонками x, y, z. Я не могу полагаться на псевдо-столбец rownum, поскольку, когда я удаляю несколько строк, rownum не изменяется. Поскольку этот запрос на удаление будет выполняться каждые 60 секунд, а rownum таблицы не будет начинаться с 1 каждый раз.

Я хочу удалить все остальные строки, кроме последних двух записей. Top будет работать

delete from custom.colperformance 
where RowID in (select top 2 RowID 
       from custom.colperformance 
       order by RowID desc) 

Это дает мне ошибку

Table structure 

ProfileTime TriggerTime RowId 
12   3    4 
12   5    6 
6    7    2 

здесь RowId приходит в случайном если удалить несколько строк между

Пожалуйста, помогите !! .. спасибо заранее

+4

Использование верхней части без заказа не имеет смысла – apomene

+0

Как выглядит ваш стол? – CompanyDroneFromSector7G

+1

Как вы определяете «первые» строки? – SouravA

ответ

1

Если это оракул вы не можете использовать TOP 10, используйте следующий синтаксис:

delete from table where RowID in (select RowID from table where rownum <= 10) 

Конечно, вы должны также дать заказ

delete from table where RowID in (select RowID from table where rownum <= 10 ORDER BY table.columnX) 
+0

У меня нет столбца с конкретным rownum. который начинается с 1,2,3 ... .. – anjali

+0

Oracle имеет псевдо столбцы с именем rowid и rownum. –

+1

@AtillaOzgur, вам нужно сначала «ЗАКАЗАТЬ», а затем получить «rownum». Также вы хотите '<=', а не '<', так как 'rownum' начинается с 1. –

0

сначала выберите верхнюю 1 со всей таблицы, затем выберите верхнюю часть со всей таблицы, где вы не учитываете результат первого запроса

select top 1 (RowID) 
from table 
where RowID NOT IN (select top 1 RowID from table) 

Теперь вы знаете, какие строки вы не хотите удалять. возможно, сохранить в таблице temp?

+0

Это недопустимо для оракул –

Смежные вопросы