Дубликаты должны быть удалены sql

У меня есть в базе данных записи

Дубликаты должны быть удалены sql

Мой sql:

    SELECT
    DISTINCT name, date(mod_wr)
FROM
    test.object_stg
WHERE
    ir = '4552724'
GROUP BY
    name, date(mod_wr)
ORDER BY name

Последняя запись такая же, как и предпоследняя. У него только другая дата. Можно ли каким-то образом запросить возврат всех записей, в которых было изменение в столбце «имя»? Для записей 4 и 5 указано то же имя, только другая дата. Я бы хотел, чтобы он вернул только записи 4 и 5, потому что изменений не было.

Какую СУБД вы используете? PL / SQL - это язык программирования Oracle для работы с базами данных.

William Robertson 25.06.2018 20:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Из ваших данных примера у вас есть 3 разных имени. Однако вы не можете использовать отдельный в своем операторе выбора, потому что он применяется ко всем перечисленным полям, и ни одна из дат не может обеспечить точное совпадение.

Однако вы можете использовать оператор group by, чтобы сопоставить ваши заголовки вместе.

// MySQL 5.6 Statement
select name, date(mod_wr) from object_stg group by name;
// MSSQL 2017 Statement
select name, max(mod_wr) from object_stg group by name;

Оба утверждения возвращают 3 строки с указанием только BMW, 1.0 GL и 1.0 GLS с одной датой.

SQL Fiddle

Ответ принят как подходящий

Если вы не хотите удалять строки, в которых повторно используются значения. Например. ваша строка № 2, вы можете использовать LAG(), а затем включать только строки, значение которых отличается от предыдущего. Например.

select name, date(mod_wr) from
(
    SELECT
        name, mod_wr, lag(name) over(order by mod_wr) as prev_name
    FROM
        test.object_stg
    WHERE
        ir = '4552724'
)
WHERE prev_name IS NULL OR name <> prev_name

Другие вопросы по теме