[英]Oracle SQL select distinct
我有一個樣本表如下。
ID Name Code Address
----+---------------+--------+----------------
1 | Sydney Hall | SH | 11 Abc Street
2 | Sydney Hall | SH | 23 Abc Street
3 | Main Hall | MH | 74 Xyz Street
4 | Odyssey Hall | OH | 133 AbZ Street
5 | Odyssey Hall | OH | 28 Xyx Street
我想為這些不同的條目選擇不同的代碼條目以及ID和名稱。 對於上表,我想得到以下內容(所以我忽略了建築地址)。
ID Name Code
----+---------------+--------+
1 | Sydney Hall | SH
3 | Main Hall | MH
4 | Odyssey Hall | OH
它可能是一個左連接,但我似乎無法將它正確地放在一起(特別是因為我從同一個表中選擇數據)。 有沒有人對此有所了解? 謝謝。
我看到每個人都已經回答了這個問題,但為什么這么復雜?
SELECT
MIN(ID) ID,
MIN(NAME) NAME,
CODE
FROM TABLE
GROUP BY CODE
SELECT *
FROM [table_1]
WHERE [ID] IN (SELECT Min([ID])
FROM [table_1]
GROUP BY CODE
)
我有兩種方法可以做到這一點。 一種是使用FIRST
聚合函數( 此處記錄 )。 語法有點令人困惑但它應該完成這項工作
Select
MIN(ID) keep (dense_rank first order by id) as id,
MIN(NAME) keep (dense_rank first order by id) as name,
CODE
FROM YOUR_TABLE
GROUP BY CODE
我建議的另一種替代方法是使用@techdo建議的ROW_NUMBER
函數,雖然我認為您需要從該答案中刪除NAME列,而是使用:
SELECT * FROM(
SELECT
ROW_NUMBER() over (partition by CODE order by ID) RNUM,
ID,
NAME,
CODE
FROM YOUR_TABLE
)x where RNUM=1;
請試試:
SELECT * FROM(
SELECT
ROW_NUMBER() over (partition by NAME, CODE order by NAME, CODE) RNUM,
ID,
NAME,
CODE,
ADDRESS
FROM YourTABLE
)x where RNUM=1;
你也可以使用這個:
SELECT ID, Name, Code
FROM table
WHERE ID IN (SELECT Max(ID)
FROM table
GROUP BY Code
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.