2017-02-21 4 views
0

Ich habe eine Tabelle ähnlich den folgenden ein:einen bestimmten doppelten Eintrag auswählen

Userid | LastFirstMI | Active 
    1  Doe, Jane S  False <<< 
    2  Doe, Jane S  True 
    3  Smith, John P False 
    4  Lee, Bob R  False 
    5  Bob, Joe L  False <<< 
    6  Bob, Joe L  True 

ich den doppelten Namen mit einem Active Wert False nur wählen zu wollen bin. Ich habe die Zeilen mit < < < angegeben. Ich habe ähnliche Fragen gesucht und gefunden, aber ich kann keinen finden, der zeigt, wie man ein bestimmtes Duplikat auswählt. Danke im Voraus. bei Bedarf nach Ihrem db Motor

+0

, die Sie db verwenden? – scaisEdge

Antwort

0

Dies wird Duplikate zurück, wo Active = 'False' wenn es einen entsprechenden Active = 'True' Account gibt.

select userid, LastFirstMI, Active 
from t 
where t.Active = 'False' 
    and exists (
    select 1 
    from t as i 
    where i.LastFirstMi = t.LastFirstMi 
     and i.Active = 'True' 
) 

Dadurch werden alle Duplikate zurück, wo Active = 'False' auch wenn es kein entsprechendes Active = 'True' Konto ist.

select userid, LastFirstMI, Active 
from t 
where t.Active = 'False' 
    and exists (
    select 1 
    from t as i 
    where i.LastFirstMi = t.LastFirstMi 
     and i.UserId <> t.UserId 
) 
+0

Das funktioniert super! Danke für die Hilfe. Ich schätze es sehr. – Matthew

+0

@Matthew gerne helfen! – SqlZim

0
select t1.userid, t1.LastFirstMI, t1.Active from table t1,table t2 
where t1.active='False' and t1.LastFirstMI=t2.LastFirstMI and t2.active='True' 

Versuchen Sie den Code oben und bitte active=False Zustand ändern.

+0

die where Bedingung muss mit der Anzahl der Spalten übereinstimmen ist subselect – scaisEdge

+0

Korrigiert, können Sie überprüfen. –

0

Ihre Spalte aktiv Unter der Annahme, ist eine Zeichenfolge

Diese

in MySQL und SQLServer funktionieren sollte
select * from my_table where 
Active = 'False' and LastFirstMi in (
    select t.LastFirstMi from ( 
    select LastFirstMI, count(*) 
    from my_table 
    group LastFirstMI 
    having count(*)>1 
) t 
) 
0

Sie row_number in den meisten Datenbanken verwenden können:

Select * 
From (
    Select t.* 
    ,row_number() over (partition by lastfirstMI order by Active) rn 
    From your_table t 
) t where rn = 1 
+0

Das wird Datensätze mit 'Active = 'True' zurückgeben, wenn kein Duplikat vorhanden ist. 'wo rn = 1 und Active = 'false' ist eine Möglichkeit, das zu beheben. – SqlZim

0
with x as (
select Userid, LastFirstMI,Active 
     , row_number() over (partition by LastFirstMI order by Active desc) as row_number 
from table 
) 

select * from x 
where Active = 'False' 
     and row_number >= 2 
Verwandte Themen