SELECT DISTINCT T_Visits.User_UID, T_Visits.Resolution, T_Visits.resolutionstring
FROM T_Visits
INNER JOIN (SELECT User_UID, max(resolution) AS max
FROM T_Visits
GROUP BY User_UID) temp
ON T_Visits.User_UID = temp.User_UID
AND T_Visits.Resolution = temp.max
이 쿼리가 없습니다 먼저 각 사용자 ID와 최대 해상도의 임시 테이블을 만든 다음 사용자 ID 및 해상도 필드와 일치하는 T_Visits 테이블의 내부 조인을 사용하여 해당 해상도 문자열을 제공해야합니다.
그러나 이러한 종류의 쿼리에는 몇 가지 문제점이 있습니다. 먼저 DISTINCT는 동일한 resolutionstring
에 대해 반환되는 여러 행을 처리하지만 동일한 해상도의 여러 모니터가있는 경우 사용자 당 여러 행을 반환해야합니다. 예를 들어, 누군가 iPhone을 사용하여 사이트를 방문하고 320x480의 히트를 기록했지만 휴대 전화를 옆으로 돌려 사이트가 다시 방문하면 X와 Y 값이 정위. 이렇게하면 resolutionstring
초마다 여러 개의 최대 해상도가 생성됩니다.
모니터에서도 동일한 현상이 발생할 수 있습니다. 문서 편집자가 모니터를 회전시켜보다 "합법적 인 용지"스타일로 볼 수있는 것은 흔한 일입니다. 그러나 가정에서 귀하의 사이트를 방문 할 때 동일한 설정을하지는 않았지만 동일한 해상도를 유지할 수 있습니다.
정확히 어떤 경우 쿼리를 반환 하시겠습니까? 이것은 당신이 관계없이 하나 이상되는 H ×이 동일한 해상도를 제공하는지 여부, 사용자 ID 당 1 개 행을 표시 할 가정합니다
주
;WITH resCTE
AS
(
SELECT User_UID
,resolutionstring
,ROW_NUMBER() OVER (PARTITION BY User_UID
ORDER BY Resolution desc
,Screen_w desc
) AS rnMax
,ROW_NUMBER() OVER (PARTITION BY User_UID
ORDER BY Resolution
,Screen_w
) AS rnMin
)
SELECT maxr.User_UID
,maxr.resolutionstring AS maxRes
,minr.resolutionstring AS minRes
FROM resCTE AS maxr
JOIN resCTE AS minr
ON minr.User_UID = maxr.User_UID
AND minr.rnMin = 1
WHERE maxr.rnMax = 1
(안된) :
둘 이상의 화면 크기에서 최대 해상도가 생성되는 예상 검색어 동작은 어떻게됩니까? 예 : 800x600 및 1000x480은 모두 동일한 제품을 제공합니다. 어느 제품을보고 할 것인가? 아니면 둘 다 보여줄 것입니까? –
당신은 요점에 저를 이겼습니다 :) –
@Ed Harper : 좋은 질문입니다. 어떤 것이지, 하나만은 중요하지 않습니다. 나는 그것이 내가 더 관심이있는 것이기 때문에 나는 폭으로 갈 것이라고 말하고 싶다. –