You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于序列号提取PostgreSQL Telephone表数据的SQL查询问题

问题:提取每个ID/tel_type_cde组合的最新记录(tel_seq_num最大)

需求说明

需要从Telephone表中,为每个ID/tel_type_cde组合提取出tel_seq_num值最大的那条记录。

原始表数据

IDareaexchlineexttel_type_cdetel_seq_nummodified_dttm
123448287678912340001-01-2023
12344838771230101-02-2023
123412323445612341001-01-2023
12354838774560101-01-2023
12364838771230001-02-2023
123612323445612340101-02-2023
12364838774580201-03-2023

预期输出结果

IDareaexchlineexttel_type_cde
12344838771230
123412323445612341
12354838774560
12364838774580

问题SQL(未得到预期结果)

select distinct on (ID)
ID,
area,
exch,
line,
ext,
tel_type_cde
from telephone 
order by ID,tel_seq_num desc;

修正后的SQL

select distinct on (ID, tel_type_cde)
ID,
area,
exch,
line,
ext,
tel_type_cde
from telephone 
order by ID, tel_type_cde, tel_seq_num desc;

修正说明

原SQL的问题在于distinct on (ID)仅按单个ID字段去重,无法区分同一ID下不同tel_type_cde的组合。我们需要将ID和tel_type_cde同时作为去重依据,这样才能为每个组合保留tel_seq_num最大的记录。对应的order by子句也要先按这两个字段排序,再按tel_seq_num降序排列,确保每个组合中最大的tel_seq_num记录排在最前面,被distinct on选中。

内容的提问来源于stack exchange,提问作者datatester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:55:25