Выберите только уникальные записи из нескольких столбцов - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть таблица, которая регистрирует загрузки по IP, версии и платформе. Глядя на таблицу вручную, я вижу много дубликатов, где все эти три значения одинаковы. (пользователь, вероятно, просто нетерпелив) Я хотел бы использовать инструкцию SELECT, которая отфильтровывает дубликаты и возвращает только одну из записей, если все 3 из этих значений совпадают. Еще более продвинутый, если возможно, у меня также есть поле даты / времени, которое использует CURRENT_TIMESTAMP. Было бы неплохо, если бы я мог включить дубликаты, если они из разных дней, но не из разных времен. Таким образом, я могу видеть, загружает ли тот же самый пользователь снова в другой день.

В основном я просто пытаюсь получить статистику о том, сколько уникальных людей загружают каждую версию каждый день. Структура таблицы БД проста ...

ключ (AUTO_INCREMENT), дата (CURRENT_TIMESTAMP), ip, user_agent, платформа, версия

Программное обеспечение имеет версию (платформу) для Windows и Mac, и я предлагаю как текущую версию, так и несколько отдельных прошлых версий, которые были до существенных изменений.

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Просто сгруппируйте по полям, которые вы хотите исключить из дублирования, например

SELECT ip, platform, version, COUNT(*) AS number_of_tries, max(download_date) AS last_download_date 
FROM downloads
GROUP BY ip, platform, version, DATE(download_date)

Тогда было бы относительно легко выполнить более сложную фильтрацию по группировке результатов по дням и т. Д.

0 голосов
/ 08 апреля 2019

MySQL 8.0+ версия, которую вы можете использовать row_number()

select * from (select *,
row_number()over(partition by ip,platform,date(datetime) order by datetime) rn
       from table_name 
) a where a.rn=1
0 голосов
/ 08 апреля 2019

Это то, что вы хотите?Возвращает первую запись в каждую дату для комбинации ip / platform / version:

select t.*
from <tablename> t
where t.datetime = (select min(t2.datetime)
                    from <tablename> t2
                    where t2.ip = t.ip and
                          t2.platform = t.platform and
                          t2.version = t.version and
                          date(t2.datetime) = date(t.datetime)
                   );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...