我有一张这样的桌子。 “邮件已发送”列的值为“ 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 |
+-------------+-----------------+------------+
答案 0 :(得分:1)
您可以使用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;
Here是数据库提琴。