在oracle SQL DB中,相同的主Id多次出现在不同的批次Id中。如何在当前批次Id之前知道批次Id
我正在研究oracle数据库。 我们将客户数据加载到源表中,最终迁移到目标表。 每次将客户数据加载到源表中时,它都有一个唯一的批处理id。 若我们想更新customer表中的某些字段,那个么我们再次在源表中加载相同的customer,但这次加载的是不同的batch_id。 现在我想在最新批次id之前知道客户的批次id。在oracle SQL DB中,相同的主Id多次出现在不同的批次Id中。如何在当前批次Id之前知道批次Id,oracle,Oracle,我正在研究oracle数据库。 我们将客户数据加载到源表中,最终迁移到目标表。 每次将客户数据加载到源表中时,它都有一个唯一的批处理id。 若我们想更新customer表中的某些字段,那个么我们再次在源表中加载相同的customer,但这次加载的是不同的batch_id。 现在我想在最新批次id之前知道客户的批次id。 我们获取的批次id通常是当前日期。看起来您基本上是在源表中查找第二大值 在此示例代码中,SOURCE\u表表示包含相同的CUSTOMER\u NO和不同的BATCH\u NO的表
我们获取的批次id通常是当前日期。看起来您基本上是在
源表中查找第二大值
在此示例代码中,SOURCE\u表
表示包含相同的CUSTOMER\u NO
和不同的BATCH\u NO
的表:
create table source_table (customer_no integer, batch_no date);
insert into source_table values ('1', SYSDATE-2);
insert into source_table values ('1', SYSDATE-1);
insert into source_table values ('1', SYSDATE);
SELECT batch_no
FROM (
SELECT batch_no, row_number() over (order by batch_no desc) as row_num
FROM source_table
) t
WHERE row_num = 2
其中,row_num=2表示表中的第二大值。
查询返回SYSDATE-1。使用行数
分析函数
您的示例数据
select * from tab
order by 1,2
CUSTOMER_ID BATCH_ID
----------- -------------------
1 09.12.2019 00:00:00
1 10.12.2019 00:00:00
2 10.12.2019 00:00:00
Row\u number
assichns序列号从1开始,每个客户订单从BATCH\u ID
开始递减-您感兴趣的是最新订单之前的一个,即编号为2的行
with cust as (
select
customer_id, batch_id,
row_number() over (partition by customer_id order by batch_id desc) rn
from tab)
select CUSTOMER_ID, BATCH_ID
from cust
where rn = 2;
CUSTOMER_ID BATCH_ID
----------- -------------------
1 09.12.2019 00:00:00