sql - oracle - group by - 无聚合
问题描述
我有一个 oracle 表,其中 ref_id 是标志字段,是数据类型,ORN 是每个 ref_id 中的数据顺序:
ref_id data ORN flag
1 100 0 0
1 200 1 0
1 300 2 0
1 400 3 0
1 110 0 1
1 210 1 1
1 150 0 2
1 250 1 2
1 350 2 2
1 450 3 2
2 500 0 0
2 600 1 0
2 700 2 0
2 800 3 0
2 120 0 1
2 220 1 1
2 320 1 1
2 420 1 1
2 170 0 2
2 270 1 2
2 370 2 2
2 470 3 2
我需要以某种方式对数据进行分组,以便为每个 ref_id 获取标志 0 中的最后一个数据和标志 2 中的最后一个数据
所以新表将是这样的:
ref_id data_1 data_2
1 400 450
2 800 470
任何提示如何在不使用循环的情况下完成此操作?
解决方案
您可以按如下方式使用分析功能和分组依据:
SELECT REF_ID,
MAX(CASE WHEN FLAG = 0 THEN DATA END) AS DATA_0,
MAX(CASE WHEN FLAG = 2 THEN DATA END) AS DATA_2
FROM
(
SELECT REF_ID, DATA, ORN, FLAG,
ROW_NUMBER() OVER (PARTITION BY REF_ID, FLAG ORDER BY ORN DESC) AS RN
FROM YOUR_TABLE
WHERE FLAG IN (0,2)
)
WHERE RN = 1
GROUP BY REF_ID
推荐阅读
- python - 如何在不单击“CTRL + C”的情况下通过 cmd 中的命令停止 Django 服务器?
- c# - 我可以将 TCPClient 的底层套接字与 Socket.Select 一起使用吗?
- javascript - 为什么 JavaScript 没有进入 For...in 循环
- javascript - CSS 动画 - 带有图像的垂直选取框 - 每次特定图像变得可见时都会淡入新的背景颜色
- javascript - 包括来自 vuex 的 mapGetters
- php - 如何在 MySQL SELECT 中正确获取输入值(WordPress 上的 Ajax)
- python - Numpy:粒子坐标成图像
- machine-learning - 可以将单个特征的不同汇总指标用作 k-means 聚类的特征吗?
- rust - 用 nom 5.0 解析数字
- java - 如何使用第一个按钮使框架显示在另一个框架旁边