2016-09-13 5 views
-1

У меня есть это заявление для нахождения max (date) в таблице.SQL - DELETE SELECT специальные столбцы

SELECT * 
from (
    select 
    max(TIME) over (partition by artnumber) as "maxTIME", 
    artnumber, 
    TIME 
    from ADE_SPOCK_REP_PRIS 
) 
where TIME not like "maxTIME" 
order by artnumber desc 

Как я могу установить Удалить перед этим утверждением?

Delete from art where artnumber in 
    (SELECT * 
    from (
     select 
     max(TIME) over (partition by artnumber) as "maxTIME", 
     artnumber, 
     TIME 
     from art 
    ) 
    where TIME not like "maxTIME" 
    order by artnumber desc) 

Это не работает. Есть ли у вас какие-либо намеки на меня?

+0

Ваш оператор выбора работает? –

+1

Что означает «не работает» - что происходит? Вы получили сообщение об ошибке? (И какой тип данных является вашим столбцом 'time' - если это дата, тогда использование' like' делает неявное преобразование и может делать нечетные вещи). –

ответ

0

Конкретный ответ на ваш вопрос является Зафиксировать select * в подзапрос:

Delete from art 
where artnumber in (select artnumber 
        from (select max(TIME) over (partition by artnumber) as "maxTIME", 
           artnumber, TIME 
          from art 
         ) 
        where TIME not like "maxTIME" 
        ); 

Некоторые дополнительные комментарии:

  • Использование order by в подзапроса обычно не имеет смысла.
  • Я не рекомендую использовать like с типами данных даты и времени (значения должны быть преобразованы в строку с использованием параметров локализации).
  • Насколько я могу судить, эта версия удалит все, потому что у каждого artnumber есть максимальное время. Я сомневаюсь, что это ваше намерение.
0


Попробуйте использовать этот запрос

DELETE FROM art WHERE MAX(time) IN 
(SELECT MAX(time) from art 
GROUP BY MAX(time)) 
WHERE TIME NOT LIKE "%maxTIME%" GROUP BY MAX(time); 
Смежные вопросы