sql - Oracle SQL 按分区从不同列返回第一个和最后一个值
问题描述
我需要查询帮助,该查询将在以下数据集中为每个分区返回一条记录。我使用 DENSE_RANK 来获取每个分区中的顺序和第一个/最后一个位置,但问题是我需要为每个 EMPLOYEE ITEM_ID 组合获取一条记录,其中包含:
- MIN(START) 是带时间的日期类型
- SUM(DURATION) 这是一个数字类型,表示活动的秒数
- 来自 INIT_STATUS 的 MIN 排名值
- 来自 FIN_STATUS 的 MAX 排名值
这是初始数据表,按排名排序的相同数据表,最后是所需的结果(见下图):
此外,这是用于获取具有排名值的有序表的代码:
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;
解决方案
使用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_
我的测试。
推荐阅读
- javascript - 量角器 - ScriptTimeoutError:脚本超时 - 来自:任务:Protractor.waitForAngular()
- android - 新 Firebase Crashlytics SDK 的 Crashlytics 日志文件位于何处
- reactjs - 开发工具中缺少 React 扩展
- phaser-framework - Phaser 3 清理资源
- azure - 如何使用用户名和密码使用 Microsoft Graph SDK 生成 GraphClient?
- python-3.x - 如何在 Python 中使用 win32com 获取主题中具有特定关键字的 Outlook 邮件?
- c# - Windows XP PDF 元数据在其他机器上消失了
- angular-material - 在angualar 8中,取数据到表的性能有什么提升
- python - 使用 apache(在 unix 上)部署 django(windows)
- mysql - 如何对 mySQL 的结果进行分组