Как я могу удалить все столбцы, которые дублируются и не имеют самой большой «суммы». У меня есть следующая таблица:
ID TIME AMMOUNT
1 x 5
2 y 1
2 y 3
3 z 1
3 z 2
3 z 3
Но я хочу, чтобы это было так, чтобы «выживал» только столбец с наибольшим числом:
ID TIME AMMOUNT
1 x 5
2 y 3
3 z 3
Как я могу это сделать?
4 ответа
Вы можете получить максимальную сумму за идентификатор и время, а затем получить соответствие строк:
select t.Id, t.Time, t.ammount
from myTable t
inner join
(select Id, time, max(ammount) as amt
from myTable
group by Id, Time) tmp on t.id = tmp.id and
t.time = tmp.time and
t.ammount = tmp.amt
РЕДАКТИРОВАТЬ: вы можете добавить DISTINCT в зависимости от ваших потребностей.
WITH cte AS (
SELECT ID, ROW_NUMBER() OVER (PARTITION BY TIME ORDER BY AMMOUNT DESC) AS ROWNUM
FROM MyTable
)
DELETE MyTable FROM MyTable JOIN cte USING (ID)
WHERE ROWNUM > 1;
Для С синтаксисом требуется MySQL 8.0.
Еще один подход с использованием CTE
with del as (
select *,
First_Value(amount) over(partition by id order by amount desc) maxamount
from t
)
delete from t
using t join del on t.id = del.id and t.amount < maxamount;
Я думаю, что некоторые из ответов здесь слишком сложны.
delete t from yourtable t join yourtable t2 on t.id=t2.id and t.time=t2.time and t2.ammount > t.ammount
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.