DELETE *
FROM coins_info
WHERE (((coins_info.Код) Not In (SELECT Max(coins_info.Код) AS 'Max-Код' FROM coins_info GROUP BY coins_info.url_loaded, coins_info.name HAVING (((Count(*))>1))) And (coins_info.Код) Not In (SELECT Max(coins_info.Код) AS 'Max-Код' FROM coins_info GROUP BY coins_info.url_loaded, coins_info.name HAVING (((Count(*))=1)))));
Перевожу запросы с Access на MуSQL, на сколько понимаю, SELECT от DELETE отличается только самим словом SELECT/DELETE, так вот, в данном случае SELECT работает, а когда меняю на DELETE, получаю ошибку
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*
FROM coins_info
WHERE (((coins_info.Код) Not In (SELECT Max(coins_info.К' at line 1
брал "Код" в ``, ничего не изменилось, что еще нужно поменять чтобы запрос заработал?
UPD: видимо простой правкой запроса не отделаться, придется переделывать его, опишу задачу:
Есть таблица coins_info
Код name symbol price1 price2 date_load url_loaded
157370 garli grlc 0,00026397 3,08043 2018-01-28 18:49:00 https://11111
157371 solaris xlr 0,00181792 21,2144 2018-01-28 18:52:00 https://11111
157372 garli grlc 0,00053393 6,23074 2018-01-28 19:05:00 https://11111
157377 pirl pirl 0,00019997 2,33359 2018-01-28 19:08:00 https://22222
157378 garli grlc 0,00053391 6,23071 2018-01-28 19:11:00 https://22222
Из нее нужно удалить все повторяющиеся старые записи по name, symbol и url_loaded, т.е. в данном случае должна удалиться только первая строка. Код выше отлично работал в Access, сейчас необходимо перевести на MySQL, во многих запросах достаточно удалить [ и ] из тела запроса и все работает прекрасно, здесь же затык какой-то.
Если вы хотите для сочетаний name, symbol оставить только самую свежую запись, то примерно так:
Находим name, symbol, max(date_load) для сочетания name, symbol
Теперь находим name, symbol, date_load, не совпадающие с найденными на первом шаге
И все их удаляем
Вот такая конструкция
delete t1 from coins_info t1
join
(select name, symbol, date_load
from coins_info t2
where (name, symbol, date_load) not in
(select name, symbol, max(date_load)
from coins_info
group by name, symbol)
) as t3
using (name, symbol, date_load)
sqlfiddle
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть звонилка, внизу у нее постоянно реклама висит, что раздражаетВозникла идея не блочить сервер рекламы, а просто обрезать снизу, либо серый...