Chicos, tengo una consulta donde básicamente selecciono el último navegador que usó nuestro usuario.Seleccione uno superior de la combinación externa izquierda
aquí es nuestra estructura (simplificado) tabla
HITS_TABLE
----------
USERID
BROWSER
HITSDATE
USER_TABLE
----------
USERID
USERNAME
y aquí es cómo consultar la última versión del navegador que utiliza nuestro usuario
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
El HITS_TABLE simplemente se añade hace varios días.
Por lo tanto, esa consulta solo corresponde a los usuarios que visitaron nuestro sitio web después de que agregamos el HITS_TABLE y elimine los otros.
Aquí es el caso de la muestra
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'
Aquí es el resultado de la muestra
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
Pero, quiero añadir otros usuarios con el navegador 'desconocido'. aquí está mi resultado deseado
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
3 'Dixon' 'Unknown'
creo que podría lograrse mediante la combinación externa izquierda. Pero siempre tuve esta: (no quiero que este resultado)
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
2 'Atwoord' 'Firefox 3.5'
3 'Dixon' 'Unknown'
espero que mi pregunta es clara.
Esta solución tiene en cuenta un hecho importante, que los otros faltan: ¿Qué sucede si la combinación de USERID e HITSDATE es ambigua, por ejemplo,? una fila adicional (2, 16/8/2009, 'Safari') existe? Usando las funciones de clasificación obtendría un resultado no determinista. ¿Puedes decir cuál es seleccionado? Esta solución proporcionaría ambas combinaciones, que en mi humilde opinión es mucho mejor. –
Información adicional: para obtener información sobre el ranking de SQL Server, consulte http://msdn.microsoft.com/en-us/library/ms189798%28SQL.90%29.aspx –
tiene razón. La función max() es muy útil para esto. gracias. pero creo que debería dejarse de lado. –