我是在oracle中使用“PARTITION BY”的新手。如下表结构中存储了一个人的多个地址,如何使用oracle SQL中的“Partition By”来
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 有什么问题吗?
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