MYSQL определяет приоритетность записи, выбранной GROUP BY

0

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

Это мой скрипт MYSQL:

SELECT device_uuid,
       gender,
       day_epoch,
       hour,
       age
FROM daily_stats_venue_unique_device_uuids_per_hour
WHERE (day_epoch + (3600*hour)) >= 1519171200 
 AND (day_epoch + (3600*hour)) < 1519340400 
 AND venue_id = 4
GROUP BY device_uuid

и это возвращает эти результаты:

Изображение 174551

(Там есть 2 device_uuid, который выглядит очень похожим, но у него есть 6 вместо 5 в начале. Извините, что это делает мой следующий снимок экрана более запутанным, но, пожалуйста, присмотритесь.)

но когда я GROUP BY device_uuid, gender группу на это: GROUP BY device_uuid, gender Я получаю следующие результаты:

Изображение 174551

Как вы можете видеть, есть 2 записи с одним и тем же device_uuid (записи 2/3), но у них разные полы. Я хочу использовать первый запрос, который я вам показывал, но если у записи есть пол, я бы хотел получить этот результат, а не тот, у кого нет пола.

Благодарим вас за любую помощь заранее

  • 0
    попробуйте SELECT * FROM (SELECT device_uuid, gender, day_epoch, hour, age FROM daily_stats_venue_unique_device_uuids_per_hour WHERE (day_epoch + (3600*hour)) >= 1519171200 AND (day_epoch + (3600*hour)) < 1519340400 AND venue_id = 4 ORDER BY gender DESC ) t GROUP BY t.device_uuid
  • 0
    @TamilSelvanC спасибо за ответ, который все еще делает то же самое, что и первый набор результатов, который я показал, он не имеет приоритета, если у него есть пол :(
Показать ещё 1 комментарий
Теги:

1 ответ

0

Взятый из этого ответа:

SELECT * FROM (
    SELECT device_uuid,
           gender,
           day_epoch,
           hour,
           age
    FROM daily_stats_venue_unique_device_uuids_per_hour
    WHERE (day_epoch + (3600*hour)) >= 1519171200 
     AND (day_epoch + (3600*hour)) < 1519340400 
     AND venue_id = 4
    ORDER BY gender DESC
) t
GROUP BY device_uuid

Обратите внимание на предупреждение об этом ответе:

Начиная с версии 5.7, параметр sql-mode по умолчанию включает ONLY_FULL_GROUP_BY, поэтому для выполнения этой работы вы не должны иметь эту возможность (отредактируйте файл параметров для сервера, чтобы удалить этот параметр).

Дальнейшие примечания, этот ответ может также дать вам некоторое направление и другому возможному решению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню