Удалить записи кроме последних

Тема в разделе "Базы данных", создана пользователем Q_BASIC, 2 сен 2017.

Модераторы: latteo
  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    451
    Симпатии:
    1.159
    Приветствую,

    Есть таблица, где сохраняются "состояния" пользователя. В ней есть id, name, group_id и user_id

    Раньше при изменении состояния, просто добавлялась новая запись. Сейчас будет последняя обновляться.

    Надо все, кроме последних состояний удалить.

    Если user_id одинаковый, а group_id разный - эти записи оставить. Это разные состояния

    Например:
    Код:
    id  |   name   |   group_id    |   user_id
    1   |  Витя    |      3        |     6
    2   |  Вася    |      3        |     6
    3   |  Петя    |      4        |     6
    
    Тут повторяются записи с id 1 и 2. Надо удалить id 1

    По моему, понятно... :)
     
    Последнее редактирование: 2 сен 2017
    dana77 нравится это.
  2. skyd3x

    skyd3x Создатель

    Регистр.:
    7 янв 2016
    Сообщения:
    28
    Симпатии:
    26
    DELETE FROM TABLE WHERE name = 'Витя' AND ID NOT IN (SELECT MAX(ID) FROM TABLE);
     
  3. E6yH

    E6yH Создатель

    Регистр.:
    9 окт 2016
    Сообщения:
    15
    Симпатии:
    8
    Код:
    SELECT
        *
    FROM
        t t1
    WHERE
        t1.id = (SELECT
                MAX(id)
            FROM
                t
            WHERE
                t.user_id = t1.user_id
                    AND t.group_id = t1.group_id);
    Это выберет все твои последние записи. Т.е. удали все кроме них.
     
  4. Dmytrodddddd

    Dmytrodddddd Создатель

    Регистр.:
    23 мар 2017
    Сообщения:
    26
    Симпатии:
    21
    Добрый день, подскажите пожалуйста. А если необходимо удалить запись под нечетными номерами, как это можно сделать??
     
  5. Цуиьфыеук

    Цуиьфыеук Создатель

    Регистр.:
    15 янв 2018
    Сообщения:
    40
    Симпатии:
    16
    Сгруппировать по group_id и user_id, получить список max(id), после этого удалить все записи с id не входящими в этот список
     
  6. Freeman08

    Freeman08 Создатель

    Регистр.:
    27 сен 2008
    Сообщения:
    28
    Симпатии:
    6
    Кажется как то так: SELECT * FROM table_name WHERE id % 2 != 0