sql - Oracle SQL:从表中选择两个子集的最大值
问题描述
我有一个格式如下的表格:
Customer Code Date
Cust1 aa '18-Mar-01'
Cust1 ab '18-Apr-05'
Cust1 ac '18-Feb-20'
Cust1 ba '18-Mar-03'
Cust1 bb '18-Apr-06'
Cust1 bc '18-May-30'
Cust2 aa '18-Jun-08'
Cust2 ab '18-May-15'
Cust2 ac '18-May-07'
Cust2 ba '18-Apr-26'
Cust2 bb '18-Jun-17'
Cust2 bc '18-Mar-29'
我试图得到这个:
Customer Code1 Date Code2 Date
Cust1 ab '18-Apr-05' bc '18-May-30'
Cust2 aa '18-Jun-08' bb '18-Jun-17'
我正在尝试获取最大代码“a*”和日期,以及“b*”和日期。我一直在使用 max 但我只得到日期而不是相应的代码。当我使用排名时,我无法获得第二个代码。有任何想法吗?
Select c1.cust_num,
c1.cust_stat,
p1.cs_code,
p1.cs_est_comp_date,
p1.cs_act_comp_date
(select max(t.Cust_Codes.cs_act_comp_date)
from t.Cust_Codes
where t.cust_code.cs_code in ('AA','A1','A2')) as c1date,
(select max(t.Cust_Codes.cs_act_comp_date)
from t.Cust_Codes
where t.cust_code.cs_code in ('BA','A0','B2')) as c2date,
from t.Cust c1,
t.Cust_Codes p1
Where c1.cust_num = p1.cust_num (+)
and c1.cust_stat = 'O'
解决方案
Oracle 有一个名为first_value
.
with
q as(
select Customer, substr(Code, 1, 1) Ch,
first_value(Code) over(
partition by Customer, substr(Code, 1, 1) order by "Date" desc) Code,
first_value("Date") over(
partition by Customer, substr(Code, 1, 1) order by "Date" desc) "Date"
from t
)
select Customer,
max(decode(ch, 'a', Code)) Code1, to_char(max(decode(ch, 'a', "Date")), 'rr-Mon-dd') Date1,
max(decode(ch, 'b', Code)) Code2, to_char(max(decode(ch, 'b', "Date")), 'rr-Mon-dd') Date2
from q
group by Customer;
推荐阅读
- python - 如何从discordpy中的文件发送图像
- regex - 带有一些例外的正则表达式匹配模式
- django - 使用 gevent 执行池的 celery 任务的 SynchronousOnlyOperation
- domain-driven-design - 事件溯源 - 如何聚合
- javascript - ONNX.js 中的 Pytorch LSTM - 未捕获(承诺中)错误:节点无法识别的输入“”:LSTM_4
- python - 如何迭代作为函数参数传递的列表?
- python - 如何在 Django Rest Framework 中获取单个项目
- java - 使用 sam stevens totp - 无法正常工作
- angular - 为什么我在编辑 HTML 模板后在 Angular 11 中收到错误 NG6001
- javascript - 使用 AJAX 在 Flask 和 JS 之间发送数据以进行 chrome 扩展