简体   繁体   English

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

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

I have a table with 300K records, but only ~100 unique town names.我有一张包含 300K 记录的表,但只有约 100 个独特的城镇名称。 I need sql to return 1 row for each individual town name.我需要 sql 为每个单独的城镇名称返回 1 行。 Table structure:表结构:

UNIQUE_ID唯一身份 STREET_NUMBER街道号码 STREET_NAME街道名称 STREET_TYPE STREET_TYPE TOWN ZIP ZIP
UID01 UID01 11 11 TROY特洛伊 STREET街道 ASHFIELD阿什菲尔德 2017 2017
UID02 UID02 13 13 ABED ROAD ASHFIELD阿什菲尔德 2017 2017
UID03 UID03 2 2 FRANK坦率 COURT法庭 EMERTON埃默顿 2021 2021
UID04 UID04 8 8 DENNIS丹尼斯 GROVE树林 SACKVILLE萨克维尔 2028 2028
UID05 UID05 97 97 MAC苹果电脑 CRESCENT新月 SACKVILLE萨克维尔 2028 2028
UID06 UID06 102 102 CHARLIE查理 WALK SACKVILLE萨克维尔 2028 2028
UID07 UID07 70 70 DEE BOULEVARD大道 WINDSOR温莎 2033 2033
UID08 UID08 27 27 POPPY罂粟 STREET街道 WINDSOR温莎 2033 2033
UID09 UID09 33 33 ALLY盟国 WAY方法 BARGO巴戈 2315 2315
UID10 UID10 48 48 ELS ELS AVENUE大街 BARGO巴戈 2315 2315

I'm trying to get the data returned to be something like:我试图让返回的数据类似于:

UNIQUE_ID唯一身份 STREET_NUMBER街道号码 STREET_NAME街道名称 STREET_TYPE STREET_TYPE TOWN ZIP ZIP
UID01 UID01 11 11 TROY特洛伊 STREET街道 ASHFIELD阿什菲尔德 2017 2017
UID03 UID03 2 2 FRANK坦率 COURT法庭 EMERTON埃默顿 2021 2021
UID04 UID04 8 8 DENNIS丹尼斯 GROVE树林 SACKVILLE萨克维尔 2028 2028
UID07 UID07 70 70 DEE BOULEVARD大道 WINDSOR温莎 2033 2033
UID09 UID09 33 33 ALLY盟国 WAY方法 BARGO巴戈 2315 2315

Don't care which record is returned for each town name, but need one record for each town.不关心每个城镇名称返回哪个记录,但每个城镇需要一个记录。

I've trawled through various similar posts but can't seem to get the syntax correct.我浏览了各种类似的帖子,但似乎无法使语法正确。

I'm able to select each individual town name using this:我可以使用这个 select 每个单独的城镇名称:

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

But not sure how to get the other attached data to return as well.但不确定如何让其他附加数据也返回。

Help please?请帮忙?

If you don't care about which one to take, then take any of them (eg first by unique_id ):如果你不关心拿哪一个,那么就拿其中任何一个(例如,首先通过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