Các bạn, tôi có truy vấn về cơ bản chọn trình duyệt mới nhất mà người dùng của chúng tôi đã sử dụng.Chọn một từ trên cùng từ bên ngoài bên trái tham gia
ở đây là chúng tôi (giản thể) Bảng cấu trúc
HITS_TABLE
----------
USERID
BROWSER
HITSDATE
USER_TABLE
----------
USERID
USERNAME
và đây là cách tôi truy vấn các trình duyệt mới nhất mà người dùng của chúng tôi sử dụng
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
Các HITS_TABLE chỉ được thêm vài ngày trước.
Vì vậy, truy vấn đó chỉ là kết quả mà người dùng đã truy cập trang web của chúng tôi sau khi chúng tôi đã thêm HITS_TABLE và loại bỏ những người khác.
Đây là trường hợp mẫu
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'
Đây là kết quả mẫu
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
Nhưng, tôi muốn thêm người dùng khác với trình duyệt 'vô danh'. Đây là kết quả mong muốn của tôi
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
3 'Dixon' 'Unknown'
Tôi tin rằng nó có thể đạt được bằng LEFT OUTER JOIN. Nhưng tôi luôn luôn có điều này: (Tôi KHÔNG muốn kết quả này)
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
2 'Atwoord' 'Firefox 3.5'
3 'Dixon' 'Unknown'
Tôi hy vọng câu hỏi của tôi là rõ ràng.
Giải pháp này cần có một thực tế quan trọng cần lưu ý là các giải pháp khác bị thiếu: Điều gì sẽ xảy ra nếu kết hợp USERID và HITSDATE không rõ ràng, ví dụ: một hàng bổ sung (2, 16/8/2009, 'Safari') tồn tại? Sử dụng các hàm xếp hạng bạn sẽ nhận được một kết quả không xác định. Bạn có thể cho biết cái nào được chọn? Giải pháp này sẽ cung cấp cho cả hai cominations IMHO tốt hơn nhiều. –
Thông tin bổ sung: Để biết thông tin về Xếp hạng SQL Server, hãy xem http://msdn.microsoft.com/en-us/library/ms189798%28SQL.90%29.aspx –
bạn nói đúng. Hàm max() rất hữu ích cho việc này. cảm ơn bạn. nhưng tôi nghĩ rằng nó nên được bên ngoài tham gia. –