Como seleccionar registos únicos por SQL

Quando faço "seleccionar * da tabela" tenho resultados como em baixo:

1 item1 data1
2 item1 data2
3 item2 data3
4 item3 data4
Como podem ver, há registos de dup da column2 (item1 são copiados). Então, como pude obter resultados assim?
1 item1 data1
2 item2 data3
3 item3 data4
Apenas um registo é devolvido do duplicado, juntamente com o resto dos registos únicos.

 56
sql
Author: OMG Ponies, 2009-10-29

7 answers

Pode usar SELECT DISTINCT ou GROUP BY para fazer isto.

SELECT DISTINCT a, c
FROM table_c

Ou

SELECT a, b
FROM table_c
GROUP BY a, b

GROUP BY será mais útil se quiser usar alguma função agregada como COUNT() ou SUM()

SELECT a, b, count(*)
FROM table_c
GROUP BY a, b

SELECT a, b, sum(d)
FROM table_c
GROUP BY a, b
 69
Author: mjallday, 2016-08-10 05:00:22

Se só tiver de remover duplicados, então use DISTINCT. GROUP BY deve ser utilizado para aplicar os operadores agregados a cada grupo

Grupo por V distinto

 19
Author: rahul, 2009-10-29 05:10:54
Depende de qual é o remoinho que queres devolver para cada item. Seus dados parecem indicar o valor mínimo de dados assim, neste caso, para o servidor SQL.
SELECT item, min(data)
FROM  table
GROUP BY item
 7
Author: Dave Barker, 2009-10-29 05:15:24

Acho que se eu não posso usar distinto por qualquer razão, então o grupo por irá funcionar.

 1
Author: John Hamelink, 2011-02-28 09:58:58

Para obter todas as colunas do seu resultado você precisa colocar algo como:

SELECT distinct a, Table.* FROM Table

Colocará a como a primeira coluna e o resto será Todas as colunas na mesma ordem que a sua definição. Isto é, a coluna a será repetida.

 1
Author: htafoya, 2017-11-15 07:40:35

Basta usar a junção interna porque o grupo por não funciona com múltiplas colunas dizendo que não estão contidas em nenhuma das funções agregadas.

SELECT a.*
FROM yourtable a
INNER JOIN 
  (SELECT yourcolumn,
    MIN(id) as id
  FROM yourtable 
  GROUP BY yourcolumn
) AS b
  ON a.yourcolumn= b.yourcolumn
  AND a.id = b.id;
 0
Author: Ankit Kashyap, 2018-01-03 08:27:44

Seleccione O Eff_st de ( seleccionar o EFF_ST, o ROW_ número () terminado (partição por eff_st) XYZ - da ABC.Código

) em que XYZ = 1 ordem por EFF_ST obter apenas a primeira linha

 -4
Author: Shailendra Singhai, 2015-02-13 14:19:51