【发布时间】:2021-01-31 09:28:28
【问题描述】:
我遇到了这个有趣的问题。我有一个名为 email_track 的表来跟踪每个类别的电子邮件状态,比如(邀请、时事通讯)
通过以下这些查询,我可以获得每个 to_email 的最新记录,
with `et2` as (
select `et1`.`category`, `et1`.`to_email`, `et1`.`subject`, `et1`.`status`, ROW_NUMBER() OVER (partition by `to_email` order by `id` desc) as `rn`
from `email_track` `et1`
)
select * from `et2` where `rn` = 1;
select `et1`.`category`, `et1`.`to_email`, `et1`.`subject`, `et1`.`status`, `et2`.`id`
from `email_track` `et1`
left join `email_track` `et2` on (`et1`.`to_email` = `et2`.`to_email` and `et1`.`id` < `et2`.`id`)
where `et2`.`id` is null;
我期待的是电子邮件john@example.com 我应该得到两条记录,一条用于类别邀请,另一条用于时事通讯。现在,我们不会得到那个结果,因为我们按to_email 分区
【问题讨论】:
-
如果你还在苦苦挣扎,请看meta.stackoverflow.com/questions/333952/…
标签: mysql sql sql-order-by greatest-n-per-group window-functions