Как удалить строки, используя 2 разных столбца в качестве условия в запросе SQL? - PullRequest
0 голосов
/ 04 августа 2020

Моя таблица выглядит примерно так:

Name       Order      Goods          Date
------------------------------------------------
Michael     1         Shoes          2019/04/05
Michael     2         Groceries      2019/05/28
Michael     3         Caps           2019/03/02
Lucas       4         Shoes          2019/02/30
Lucas       5         Caps           2019/03/31
Mary        6         Shoes          2018/04/22 
Mary        7         Shoes          2018/03/25
Mary        8         Groceries      2017/08/22
Mary        9         Caps           2019/01/01

Как определить запрос, чтобы я мог удалять строки, подчиняющиеся следующим условиям:

  1. Прежде всего Я хочу сгруппировать все по столбцу Name

  2. Shoes - моя ссылка. Мне нужно проверить, купил ли какой-либо клиент «Обувь» и будет ли регистрировать любые другие Товары тогда и только тогда, когда дата покупки предшествует дате покупки «Обувь» этого клиента (сгруппирована по столбцу «Имя») (т.е. кроме обуви, купленной после даты покупки обуви, эта любая другая хорошая строка будет удалена)

  3. Я сохраняю только дату первой покупки обуви для сравнения. Удаляются и более новые даты. Сохраняется только первая (более старая).

Итак, у меня будет таблица, как показано ниже:

Michael 1 Shoes      2019/04/05
Michael 3 Caps       2019/03/02
Lucas   4 Shoes      2019/02/30
Mary    7 Shoes      2018/03/25
Mary    8 Groceries  2017/08/22

Спасибо

1 Ответ

1 голос
/ 04 августа 2020

Вы можете присоединиться к агрегированному запросу, который вычисляет первую дату, когда каждый клиент заказал обувь, и использовать эту информацию для фильтрации строк для удаления:

delete t
from mytable t
inner join (
    select name, min(date) min_date 
    from mytable 
    where goods = 'Shoes' 
    group by name
) t1 on t.name = t1.name and t.date > t1.min_date

Демонстрация на DB Fiddle :

Name    | OrderID | Goods     | Date      
:------ | ------: | :-------- | :---------
Michael |       1 | Shoes     | 2019-04-05
Michael |       3 | Caps      | 2019-03-02
Lucas   |       4 | Shoes     | 2019-02-28
Mary    |       7 | Shoes     | 2018-03-25
Mary    |       8 | Groceries | 2017-08-22
...