SQL: обновить все строки, кроме одной из каждой группы - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть такой стол. Столбец «Письмо отправлено» имеет либо значение «0», либо дату.

+-------------+-----------------+------------+
| Ordernumber |      Email      | Mail sent  |
+-------------+-----------------+------------+
|           1 | john.d@mail.com | 01.01.2018 |
|           2 | john.d@mail.com | 02.01.2018 |
|           3 | anne.t@mail.com |          0 |
|           4 | anne.t@mail.com | 04.01.2018 |
|           5 | anne.t@mail.com | 05.01.2018 |
|           6 | jeff.k@mail.com | 06.01.2018 |
|           7 | jeff.k@mail.com | 07.01.2018 |
|           8 | jeff.k@mail.com |          0 |
|           9 | mary.k@mail.com | 09.01.2018 |
|          10 | sam.b@mail.com  |          0 |
|          11 | sam.b@mail.com  |          0 |
+-------------+-----------------+------------+

Я хочу обновить столбец «Почта отправлена», чтобы для каждого письма в «Почте отправлено» была не более одной даты. Ограничение: Наименьший порядковый номер каждого электронного письма, в котором есть дата, должен содержать дату, остальное должно быть установлено на «0».

Результат таблицы должен быть:

+-------------+-----------------+------------+
| Ordernumber |      Email      | Mail sent  |
+-------------+-----------------+------------+
|           1 | john.d@mail.com | 01.01.2018 |
|           2 | john.d@mail.com |          0 |
|           3 | anne.t@mail.com |          0 |
|           4 | anne.t@mail.com | 04.01.2018 |
|           5 | anne.t@mail.com |          0 |
|           6 | jeff.k@mail.com | 06.01.2018 |
|           7 | jeff.k@mail.com |          0 |
|           8 | jeff.k@mail.com |          0 |
|           9 | mary.k@mail.com | 09.01.2018 |
|          10 | sam.b@mail.com  |          0 |
|          11 | sam.b@mail.com  |          0 |
+-------------+-----------------+------------+

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать join:

update likethis lt join
       (select email, min(ordernumber) as minon
        from likethis
        where mailsent <> 0
        group by email
       ) lt2
       on lt.email = lt2.email
    set lt.mailsent = 0
    where lt.mailsent <> 0 and lt.ordernumber > lt2.minon;

Здесь - это скрипка БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...