Select

如何選擇不同的記錄?

  • February 4, 2016

我有一張桌子,如下:

ID   |  Name     |  MyID
1    |  Alan     |  2
2    |  Alan     |  2
3    |  John     |  3

我想選擇記錄如下:

  1. 如果兩條記錄在“名稱”列中具有重複值,則僅選擇第一條記錄並丟棄另一條記錄,即使兩條記錄在其他列中具有不同值也是如此。
  2. 如果兩條記錄具有不同的“名稱”值,則它們通過“MyID”列按升序排序。
  3. 應返回記錄的所有列。

因此對於上述記錄,查詢應選擇以下記錄:

ID   |  Name     |  MyID
1    |  Alan     |  2
3    |  John     |  3

如何編寫查詢?看來我應該使用 DISTINCT 或 GROUP BY,但我的查詢都失敗了。請幫忙。

謝謝

此查詢帶有DISTINCT

SELECT DISTINCT Name, MyID
FROM data;

返回不同的NameMyID

Name     |  MyID
Alan     |  2
John     |  3

此查詢帶有GROUP BY

SELECT MIN(ID) AS ID, Name, MyID
FROM data
GROUP BY Name, MyID;

返回NameMyId使用最小ID的樣本:

ID   |  Name     |  MyID
1    |  Alan     |  2
3    |  John     |  3

這兩個查詢都在這個SQL Fiddle中,並且可以與大多數 RDBMS 一起使用。(範例使用 SQL Server)

我猜這就是你所追求的。

SELECT MIN(ID) AS ID,
      Name, MyID
FROM tablename
GROUP BY MyID, Name;

如果Name兩者之間可以不同MyID,它會變得有點複雜。

SELECT ID, Name, MyID
FROM (
   SELECT ID, Name, MyID,
         ROW_NUMBER() OVER (PARTITION BY MyID ORDER BY ID) AS _rn
   FROM tablename
   ) AS sub
WHERE _rn=1;

引用自:https://dba.stackexchange.com/questions/128227