mysql - 获取每个类别的最新状态
问题描述
我遇到了这个有趣的问题。我有一个名为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
解决方案
我应该得到两条记录,一条用于类别邀请,另一条用于时事通讯。现在,我们不会得到那个结果,因为我们按
to_email
.
添加category
到partition by
窗口函数的子句应该足以给你想要的结果:
with et2 as (
select et1.category, et1.to_email, et1.subject, et1.status,
row_number() over(partition by to_email, category order by id desc) as rn
from email_track et1
)
select * from et2 where rn = 1;
推荐阅读
- python-2.7 - 使用 tkinter python 2.7 将数据从 excel 加载到 json 文件时显示加载 gif
- json - 在 SNOWFALKE 中从 JSON 中提取和转换 Datetime 字段
- javascript - 有没有办法在不硬编码的情况下获取键盘键列表及其各自的键码?
- javascript - 在 JSON API 调用中调用特定数组
- python - 没有标签元素的 xpath
- c# - IsUnique 验证属性不适用于数据库中的其他条目
- python - Pandas 将一列元组旋转/扩展为命名列
- powershell - 我想获取具有 AccountExpires 的 Active Directory 用户列表,但该属性对所有用户都返回空
- javascript - 通过 axios 将文件 VueJS 上传到 NodeJS 后端
- regex - 如何在 sed 中只使用第一次出现的连字符?