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
Этот запрос сначала создает временную таблицу с идентификатором каждого пользователя и максимальным разрешением, а затем внутреннюю объединяет ее с таблицей T_Visits, совпадающей с полями идентификатора пользователя и разрешения, что должно дать вам соответствующие строки разрешения.
Однако с этим типом запроса есть некоторые проблемы. Прежде всего, хотя DISTINCT заботится о том, чтобы несколько строк возвращались для одного и того же resolutionstring
, он все равно должен возвращать несколько строк на пользователя, если у них есть несколько мониторов с одинаковым разрешением. Например, что если кто-то заходит на ваш сайт с iPhone, и вы записываете попадание с разрешением 320x480, но затем они поворачивают свой телефон вбок и снова обращаются к вашему сайту, который теперь должен зарегистрировать 480x320, потому что его значения X и Y теперь поменялись местами из-за ориентации. Это приведет к нескольким попаданиям с максимальным разрешением с разными resolutionstring
с.
То же самое может случиться с мониторами. Редакторы документов нередко поворачивают свои мониторы для более «легального» представления в стиле. Однако, когда они посещают ваш сайт из своих домов, они могут не иметь такой же настройки, но имеют одинаковое разрешение.
Что именно вы хотите, чтобы ваш запрос возвращал, если это так?