2013-06-06 18 views
5

Ich habe eine Tabelle, die eine Tonne Zeilen (> 10K) hat. Die meisten Zeilen haben doppelte Rolle Werte, die mit dem Benutzername verbunden sind.SQL Server wählen verschiedene letzte Werte

Was ich versuche, durch verschieden ist wählen Reihen zu tun und aktuelle Rolle hinzugefügt von request_id. Ich habe es fast, aber der Teil, der mein Schwanz tritt ist, gibt es null Werte in einigen der request_id Felder, weil diese Anforderungen vor dem Hinzufügen dieser Spalte gemacht wurden. I STILL müssen sie in die select statement aufnehmen, falls ein Benutzer seit dem Update keine andere Anfrage eingegeben hat.

Hier ist ein Beispiel meiner Tabellenstruktur:

id | uname | role | request_id 
0 | jsmith | User | null 
1 | jsmith | Admin | null 
2 | jsmith | Dude | null 
3 | jsmith | Admin | 56 
4 | jsmith | Dude | 56 
5 | jsmith | Admin | 57 
6 | jsmith | Dude | 57 

Dies wäre das gewünschte Ergebnis:

0 | jsmith | User | null 
5 | jsmith | Admin | 57 
6 | jsmith | Dude | 57 

Hier sind die Aussagen die ich bisher ausprobiert habe:

Verbinden

select distinct a.uname, a.role, a.request_id from (
    select * from das_table 
    ) 
b join das_table a on b.role = a.role and b.request_id = a.request_id 
where a.uname = 'jsmith' 

Ergebnis: Diese Zeilen mit eliminiert request_id = NULL

MAX()

Das ist für mich nicht funktioniert Ich glaube, weil MAX() nicht null Werte zählt?

select distinct uname, role, max(request_id) as request_id from das_table where uname='jsmith' 
group by uname, role, request_id 

ähnliche Fragen Ich habe betrachtet:

Eine Einschränkung in meiner Frage, die ich denke, es ist anders als die andere macht ich recherchiert habe die request_id ist null die Möglichkeit von zu sein.

Select distinct values from 1 column | SQL Server : select distinct by one column and by another column value |

Antwort

11

Die max Abfrage hat nicht funktioniert, weil Sie request_id in der Gruppierung enthalten - versuchen:

select distinct uname, role, max(request_id) as request_id 
from das_table where uname='jsmith' 
group by uname, role 

SQLFiddle here.

+0

Danke Mark !! Das hat den Trick gemacht! – ckpepper02

+0

@ ckpepper02: Ich bin froh, dass ich helfen konnte. –

1

Es scheint, als würde ISNULL Ihr Problem lösen, ich verwende 1 hier zur Vereinfachung, aber Sie könnten -1 verwenden, wenn das für Ihre Verwendung sinnvoller ist.

MAX(ISNULL(request_id, 1)) 
Verwandte Themen