[英]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.