2016-12-28 39 views
7

enter image description hereSerwer SQL: jak uniknąć duplikowania danych?

Chcę przesłać zapytanie powyżej.

Lewy obraz to oryginalne dane, prawy obrazek to dane zapytania.

select distinct ID, Nickname, Revision 
from test_table 

To zapytanie nie wykazują powyżej obrazu.

Jak uniknąć duplikowania danych?

+0

jaki jest wynik, który otrzymujesz obecnie? –

+0

Chcę uzyskać tylko ostatnie dane rewizji. i używam serwera sql. – somputer

+0

@JaydipJ - BobT jest trzecią wersją dla ID użytkownika 1. – Hogan

Odpowiedz

16

Jeśli SQL Server, przy użyciu funkcji okna ROW_NUMBER w podzapytaniu:

select t.id, t.nickname, t.revision 
from (
    select t.*, row_number() over (
      partition by t.id order by t.revision desc 
      ) rn 
    from your_table t 
    ) t 
where rn = 1; 

lub korzystając TOP with ties z ROW_NUMBER:

select top 1 with ties * 
from your_table 
order by row_number() over (
     partition by id order by revision desc 
     ) 

Jeśli MySQL:

select t.* 
from your_table t 
inner join (
    select id, MAX(revision) revision 
    from your_table 
    group by id 
    ) t1 on t.id = t1.id 
    and t.revision = t1.revision; 
5

Kolejna sztuczka z użyciem TOP 1 with TIES

SELECT Top 1 with ties * 
    FROM your_table t 
Order by row_number() over (partition BY t.id order by t.revision DESC) 
1
select distinct ID, Nickname, MAX(Revision) 
from test_table 
group by ID 
+0

nie musisz używać zarówno odrębnych, jak i grupowych klauzul w tym samym oświadczeniu –