Guys, ich habe eine Abfrage, wo grundsätzlich wählen Sie den neuesten Browser, den unser Benutzer verwendet.Wählen Sie die oberste von links äußeren Join
hier ist unsere (vereinfacht) Tabellenstruktur
HITS_TABLE
----------
USERID
BROWSER
HITSDATE
USER_TABLE
----------
USERID
USERNAME
und hier ist, wie ich die neueste Browser abfragen, die unsere Benutzer verwendet
SELECT U.*, H.BROWSER
FROM USER_TABLE U
CROSS APPLY
(SELECT TOP 1 BROWSER
FROM HITS_TABLE
WHERE HITS_TABLE.USERID = U.USERID
ORDER BY HITS_TABLE.HITSDATE DESC
)as H
Die HITS_TABLE ist gerade vor einigen Tagen gegeben.
Also, diese Abfrage ist nur resultierende Benutzer, die unsere Website besucht haben, nachdem wir die HITS_TABLE hinzugefügt, und die anderen zu beseitigen. Hier
ist die Probe Fall
USER_TABLE
-------------------
USERID USERNAME
-------------------
1 'Spolski'
2 'Atwoord
3 'Dixon'
HITS_TABLE
------------------------------
USERID HITSDATE BROWSER
------------------------------
2 15/8/2009 'Firefox 3.5'
1 16/8/2009 'IE 6'
2 16/8/2009 'Chrome'
Hier ist das Probenergebnis
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
Aber ich andere Benutzer hinzufügen möchten mit ‚unbekannt‘ Browser. Hier ist mein gewünschtes Ergebnis
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
3 'Dixon' 'Unknown'
Ich glaube, es durch LEFT OUTER JOIN erreicht werden kann. Aber ich dies immer hatte: (Ich will nicht dieses Ergebnis)
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
2 'Atwoord' 'Firefox 3.5'
3 'Dixon' 'Unknown'
Ich hoffe, meine Frage ist klar.
Diese Lösung berücksichtigt eine wichtige Tatsache, dass die anderen fehlen: Was passiert, wenn die Kombination von USERID und HITSDATE mehrdeutig ist, z. eine zusätzliche Zeile (2, 16/8/2009, 'Safari') existiert? Mit Ranking-Funktionen erhalten Sie ein nicht-deterministisches Ergebnis. Kannst du sagen, welcher ausgewählt ist? Diese Lösung würde beide Kombinationen bieten, was IMHO viel besser ist. –
Zusätzliche Informationen: Weitere Informationen zum SQL Server Ranking finden Sie unter http://msdn.microsoft.com/en-us/library/ms189798%28SQL.90%29.aspx –
Sie haben Recht. Die Funktion max() ist dafür sehr nützlich. Danke. aber ich denke, es sollte Outer Join bleiben. –