Sql 从表中获取记录?
我有一个数据如下的表 映射关系 1个任务\u id映射到多个任务\u详细信息\u id 1到多个 我想要的是遍历表并获取记录,就像同一个任务id存在2次以上一样,然后获取该任务id的前2条最新记录 样本输出Sql 从表中获取记录?,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我有一个数据如下的表 映射关系 1个任务\u id映射到多个任务\u详细信息\u id 1到多个 我想要的是遍历表并获取记录,就像同一个任务id存在2次以上一样,然后获取该任务id的前2条最新记录 样本输出 Task_detail_id Task_id Creation_date 1 20 2020-05-02 20:28:23.354 2 21 2020-05-02 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;
只标记您使用的数据库。我正在使用PostgreSql向我们展示一些示例表数据和预期结果-所有内容都是格式化文本,而不是图像。请看一下为什么任务ID 20和21在输出中?它们只存在一次,不超过2次。上面的解决方案是返回所有行。i:e它与样品不匹配output@Sam:抱歉,应按任务\u id进行分区
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;