2017-07-24 2 views
0

Haben Sie eine Tabelle wie folgt. Wenn der maximale Wert von confidenceCode eindeutig ist, geben Sie diese Zeile zurück, andernfalls no.Max Wert einzigartig

LocationID ConfidenceCode 
017755029 05 
017755029 05 
017755029 01 
018577655 05 
018577655 09 
021886301 10 
021886301 09 
021886301 09   

Erwartete Ausgabe

LocationID ConfidenceCode 
    018577655 09 
    021886301 10 

My SQL, wie unten, es funktioniert, auf der Suche nach besseren Version

;WITH CTEConfidenceCode as 
(
SELECT *, dense_rank() over (partition by LocationID order by 
[ConfidenceCode] desc) as ConfidenceRowNum FROM testTable 
), 
CTEGroup as 
(SELECT DUNS1,[ConfidenceCode],count(1) countValue FROM CTEConfidenceCode 
WHERE ConfidenceRowNum=1 
GROUP BY LocationID,[ConfidenceCode]) 

SELECT * FROM CTEGroup WHERE countValue=1 
+0

Ich meine, ich nehme an, Sie könnten nur eine ausgewählte locationid, max (confidencecode) mit einer nicht vorhandenen Klausel? z.B. etwas wie 'select locationid, confidencycode von (wählen locationid, confidencecode = max (confidencecode) von testtable group by locationid) als t wo nicht existiert (wähle 1 aus testtable wo locationid = t.locationid und confidencecode = t.confidencecode hat count (*)> 1); aber ich weiß nicht, wie viel besser das ist oder nicht. – ZLK

+0

Vielleicht könnten Sie eine bessere Erklärung dafür liefern, warum mehr als eine Zeile zurückgegeben werden soll. Msgstr "Wenn der max. Wert für den confidenceCode eindeutig ist, dann gebe diese Zeile zurück, ansonsten nein." erklärt es nicht. – HABO

Antwort

1

Hmmm. . . Wenn ich deine Frage richtig verstehe:

+0

Du schlägst mich dazu! Tabellenalias fehlte;) –