sql - 从表中获取记录?
问题描述
我有一个表格,其中的数据是这样的
映射关系
1 task_id 映射到多个 task_detail_id ( 1 to Many )
Task_detail_id Task_id Creation_date
1 20 2020-05-02 20:28:23.354
2 21 2020-05-02 20:28:23.354
3 22 2020-05-02 19:28:23.354
4 22 2020-05-02 18:28:23.354
5 22 2020-05-02 17:28:23.354
6 22 2020-05-02 16:28:23.354
7 22 2020-05-02 15:28:23.354
8 23 2020-05-02 10:28:23.354
9 24 2020-05-02 09:28:23.354
10 24 2020-05-02 08:28:23.354
11 24 2020-05-02 07:28:23.354
我想要的是遍历表并获取记录,就好像相同的 task_id 存在超过 2 次然后获取该 task_id 的前 2 个(最新)记录
样本输出
Task_detail_id Task_id Creation_date
1 20 2020-05-02 20:28:23.354
2 21 2020-05-02 20:28:23.354
3 22 2020-05-02 19:28:23.354
4 22 2020-05-02 18:28:23.354
8 23 2020-05-02 10:28:23.354
9 24 2020-05-02 09:28:23.354
10 24 2020-05-02 08:28:23.354
解决方案
这通常通过窗口函数完成:
select task_detail_id, task_id, creation_date
from (
select task_detail_id, task_id, creation_date,
row_number() over (partition by task_id order by creation_date desc) as rn
from data
) t
where rn <= 2
order by task_detail_id, task_id;
推荐阅读
- android - 谷歌登出问题
- c - 如何用 C 中的数组解决这个问题?
- .net - 为什么我会收到这些 Typescript 编译时错误?
- web-services - 跟踪和报告静态站点上的下载
- r - nloptr COBYLA 方法无法识别 R 中的等式约束
- c# - 从 C# 对(拥有的)谷歌邮件帐户的“更”安全的应用程序访问可能是什么?
- python - 在 Tensorflow 中训练 CNN 时,经过一些训练步骤后,损失值变得恒定
- java - 从下载中选择文件时崩溃
- swift - CLSLogv 日志不会出现在 Crashlytics 中
- python - 基于 Python 代码在 R 中绘制断棒过程