首页 > 解决方案 > Oracle SQL 按分区从不同列返回第一个和最后一个值

问题描述

我需要查询帮助,该查询将在以下数据集中为每个分区返回一条记录。我使用 DENSE_RANK 来获取每个分区中的顺序和第一个/最后一个位置,但问题是我需要为每个 EMPLOYEE ITEM_ID 组合获取一条记录,其中包含:

这是初始数据表,按排名排序的相同数据表,最后是所需的结果(见下图):

此外,这是用于获取具有排名值的有序表的代码:

SELECT T.*,
    DENSE_RANK() OVER (PARTITION BY T.EMPLOYEE, T.ITEM_ID ORDER BY T.START) AS D_RANK
FROM TEST_DATA T
ORDER BY T.EMPLOYEE, T.ITEM_ID, T.START;

之前和之后的数据

标签: sqloracle

解决方案


使用first/last选项查找状态。剩下的是经典聚合:

select employee, min(start_), sum(duration),
       max(init_status) keep (dense_rank first order by start_),
       max(fin_status)  keep (dense_rank last  order by start_)
  from test_data t
  group by employee, item_id
  order by employee, item_id;

start是一个保留字,所以我用于start_我的测试。


推荐阅读