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