繁体   English   中英

Oracle 11g - select 表中每个城镇只有一行

[英]Oracle 11g - select only one row for each town in a table

我有一张包含 300K 记录的表,但只有约 100 个独特的城镇名称。 我需要 sql 为每个单独的城镇名称返回 1 行。 表结构:

唯一身份 街道号码 街道名称 STREET_TYPE ZIP
UID01 11 特洛伊 街道 阿什菲尔德 2017
UID02 13 阿什菲尔德 2017
UID03 2 坦率 法庭 埃默顿 2021
UID04 8 丹尼斯 树林 萨克维尔 2028
UID05 97 苹果电脑 新月 萨克维尔 2028
UID06 102 查理 萨克维尔 2028
UID07 70 大道 温莎 2033
UID08 27 罂粟 街道 温莎 2033
UID09 33 盟国 方法 巴戈 2315
UID10 48 ELS 大街 巴戈 2315

我试图让返回的数据类似于:

唯一身份 街道号码 街道名称 STREET_TYPE ZIP
UID01 11 特洛伊 街道 阿什菲尔德 2017
UID03 2 坦率 法庭 埃默顿 2021
UID04 8 丹尼斯 树林 萨克维尔 2028
UID07 70 大道 温莎 2033
UID09 33 盟国 方法 巴戈 2315

不关心每个城镇名称返回哪个记录,但每个城镇需要一个记录。

我浏览了各种类似的帖子,但似乎无法使语法正确。

我可以使用这个 select 每个单独的城镇名称:

select min(TOWN) keep (dense_rank first order by rownum) TOWN
from ADDRESS_TABLE group by TOWN;

但不确定如何让其他附加数据也返回。

请帮忙?

如果你不关心拿哪一个,那么就拿其中任何一个(例如,首先通过unique_id ):

WITH
   temp
   AS
      (SELECT unique_id,
              street_number,
              street_name,
              street_type,
              town,
              zip,
              ROW_NUMBER () OVER (PARTITION BY town ORDER BY unique_id) rn
         FROM address_table)
SELECT unique_id,
       street_number,
       street_name,
       street_type,
       town,
       zip
  FROM temp
 WHERE rn = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM