2016-03-08 7 views
-3

У меня есть таблица с восемью столбцами, включая идентификатор устройства, тип чтения устройства и дату чтения устройства. Эти три колонки будет выглядеть следующим образом: Example TableСтроки SQL Delete на основе нескольких столбцов

То, что я хотел бы сделать, это удалить все строки, для которой DevReadType = XX и каждая строка с соответствующим DevNum, но в DevReadDate, который меньше, чем дата, когда DevReadType = «XX ». Я не смог найти примеров с таким сложным условным. Помощь будет принята с благодарностью!!

+0

каковы ваши rdbms? Покажите нам пример данных и ожидаемый результат. \t Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –

ответ

0

Если я правильно понимаю, я хотел бы предложить что-то вдоль линий:

DELETE d 
FROM device d 
JOIN (
    SELECT DevNum, MAX(DevReadDate) maxDevReadDate 
    FROM device 
    WHERE devReadType = 'xx' 
    GROUP BY DevNum 
) b 
ON d.DevNum = b.DevNum AND (d.DevReadDate < b.maxDevReadDate OR d.devReadType = 'xx') 
+0

спасибо !! Это было именно то, что мне нужно! – mdarr

0
delete from device 
    where DevNum = @devicenum 
    and DevReadType = 'XX' 
    and DevReadDate < @date 

вы можете протестировать, где положение, выполнив выберите againsr таблице устройств первым:

select * 
from device 
    where DevNum = @devicenum 
    and DevReadType = 'XX' 
    and DevReadDate < @date 
+0

Спасибо за отзыв Макс, из 2,5 миллионов строк в моей таблице, в столбце DevReadType 12 000 раз появляется «XX». Вы знаете, есть ли способ сделать это удаление с использованием переменных, а не указывать точные экземпляры, которые необходимо удалить? – mdarr

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