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.
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
Se só tiver de remover duplicados, então use DISTINCT
. GROUP BY
deve ser utilizado para aplicar os operadores agregados a cada grupo
SELECT item, min(data)
FROM table
GROUP BY item
Acho que se eu não posso usar distinto por qualquer razão, então o grupo por irá funcionar.
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.
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;
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