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