如何在Oracle SQL中使用“分区依据”

问题描述 投票:0回答:1

我是在oracle中使用“PARTITION BY”的新手。如下表结构中存储了一个人的多个地址,如何使用oracle SQL中的“Partition By”来

  1. 获取每人每种类型的记录数以及
  2. 获取每人每种类型的最新Addr_ID

PERSON_ID ADDR_ID 类型 EFF_START_DATE EFF_END_DATE
6207445 7390814 首页 2024-02-26 4712-12-31
6207445 0042548 首页 2023-05-15 4712-12-31
6207445 6462255 首页 2022-01-31 4712-12-31
6207445 6462287 邮件 2022-01-31 4712-12-31
6207445 0042571 邮件 2023-05-15 4712-12-31 1111111 0042578 邮件 2023-05-15 4712-12-31

我希望它能给我: Person_ID 类型 Rec_Count ===================== 6207445 首页 3 6207445 邮件 2 1111111 邮件 1

但是,当我尝试下面的sql时,它给了我一个意想不到的结果:

选择 person_id,输入, count(*) OVER (PARTITION BY person_id) AS rec_count 来自 PER_PERSON_ADDR_USAGES_F 在哪里 person_id = '6207445' 按rec_count desc排序

PERSON_ID 类型 REC_COUNT ===================== 6207445 首页 5 6207445 邮件 5 6207445 首页 5 6207445 邮件 5 6207445 首页 5

我的 SQL 有什么问题?

另外,如果我想获取每个人每种类型的最新Addr_ID,我该怎么办?

选择 person_id,输入, count(*) OVER (PARTITION BY person_id) AS rec_count 来自 PER_PERSON_ADDR_USAGES_F 在哪里 to_number(rn) > 1 按rec_count desc排序

我尝试了这个,但失败了,如下:

查询执行于 2024 年澳大利亚东部时间 2 月 26 日星期一 15:58:14 开始 执行查询时出错: ORA-06550: 第 15 行,第 13 列: PL/SQL: ORA-00904: “REC_COUNT”: 无效标识符 ORA-06550: 第 7 行,第 17 列: PL/SQL:忽略 SQL 语句

知道我的 SQL 有什么问题吗?

sql oracle partition
1个回答
0
投票

Partition by 与group by类似,只需提及要分组依据的列即可

如果您还想按类型分组,则需要包含类型

COUNT(*) OVER (PARTITION BY person_id) AS rec_count

这意味着您想按 person_id 进行分组,但不包括 type

因此,请包含如下类型

COUNT(*) OVER (PARTITION BY person_id, type) AS rec_count
© www.soinside.com 2019 - 2024. All rights reserved.