Я написал скрипт 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
и это возвращает эти результаты:
(Там есть 2 device_uuid, который выглядит очень похожим, но у него есть 6 вместо 5 в начале. Извините, что это делает мой следующий снимок экрана более запутанным, но, пожалуйста, присмотритесь.)
но когда я GROUP BY device_uuid, gender
группу на это: GROUP BY device_uuid, gender
Я получаю следующие результаты:
Как вы можете видеть, есть 2 записи с одним и тем же device_uuid (записи 2/3), но у них разные полы. Я хочу использовать первый запрос, который я вам показывал, но если у записи есть пол, я бы хотел получить этот результат, а не тот, у кого нет пола.
Благодарим вас за любую помощь заранее
Взятый из этого ответа:
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
, поэтому для выполнения этой работы вы не должны иметь эту возможность (отредактируйте файл параметров для сервера, чтобы удалить этот параметр).
Дальнейшие примечания, этот ответ может также дать вам некоторое направление и другому возможному решению.
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