Идентификация повторяющихся строк среди дискретных наборов записей в запросе MYSQL

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

Вот некоторые данные (размеры аудитории Facebook, как это бывает), которые я собираю через регулярные промежутки времени.

Каждый тест представляет собой target, и есть два batches, 18 и 19 (но в полном наборе данных их будет намного больше).

+--------+-------+----------+-------+---------------------+
| target | batch | location | daily | created_at          |
+--------+-------+----------+-------+---------------------+
|  53003 |    18 | Austria  | 12117 | 2019-05-27 10:55:48 |
|  53003 |    19 | Austria  | 12663 | 2019-05-29 01:18:25 |
|  53004 |    18 | Austria  |  4999 | 2019-05-27 10:55:49 |
|  53004 |    19 | Austria  |  4999 | 2019-05-29 01:18:26 |
|  53005 |    18 | Austria  |   999 | 2019-05-27 10:55:50 |
|  53005 |    19 | Austria  |   997 | 2019-05-28 22:19:25 |
+--------+-------+----------+-------+---------------------+

Я хочу фильтровать по дням, когда batch 18 и 19 для одного и того же target имеют одинаковое значение daily.

Итак, я получил бы что-то вроде следующего (потому что цель 53004 — единственная с одинаковым результатом за оба дня).

Примечание: важно то, что я хочу, чтобы каждая цель сравнивалась сначала отдельно, поэтому, если другая цель имеет daily=4999 для обеих партий, она будет учитываться отдельно, и если две цели по совпадению имеют, скажем, daily=123, но только для одной партии каждый, они также не будут считаться совпадением.

+--------+-------+----------+-------+---------------------+
| target | batch | location | daily | created_at          |
+--------+-------+----------+-------+---------------------+
|  53004 |   n/a | Austria  |  4999 | n/a                 |
+--------+-------+----------+-------+---------------------+

(н/д просто указывают, что эти столбцы больше не будут одиночными значениями, и меня это не волнует.)

@RaymondNijland, где значение daily одинаково для каждого batch в одном и том же target.

William Turrell 29.05.2019 12:05

да, я удалил свой комментарий, я заметил это и после моего комментария, когда я еще раз перечитал вопрос ..

Raymond Nijland 29.05.2019 12:06

но, как бы то ни было, «Я хочу отфильтровать по дням, когда пакеты 18 и 19 для одной и той же цели имеют одинаковое дневное значение». и «Примечание: важно то, что я хочу, чтобы каждая цель сравнивалась сначала отдельно, поэтому, если другая цель имеет значение daily=4999 для обеих партий, она будет учитываться отдельно»., как это выглядит, данные примера и ожидаемые результаты не включают это.

Raymond Nijland 29.05.2019 12:06

Также может быть больше двух записей? Если нет, то ответ @stickybit выглядит как решение вашего вопроса.

Raymond Nijland 29.05.2019 12:12

@RaymondNijland да, может быть - «есть две партии, 18 и 19 (но в полном наборе данных будет намного больше)» - min () и max () все равно будут работать для большей группы, хотя предположительно?

William Turrell 29.05.2019 12:14

в этом случае, как кажется, вы хотите выбрать MAX() в любом случае, я считаю, что данные вашего примера и ожидаемые результаты не совпадают. ответ stickybit - умный способ, если быстрее проверить, есть ли как минимум две записи в группе ..

Raymond Nijland 29.05.2019 12:18
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
6
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете агрегировать и проверить в предложении HAVING, что минимум и максимум равны.

SELECT target,
       'n/a' batch,
       location,
       max(daily) daily,
       'n/a' created_at
       FROM elbat
       GROUP BY target,
                location
       HAVING min(daily) = max(daily);

Другие вопросы по теме