我已经编写了一个 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, sex
时,我得到以下结果:
如您所见,有 2 条记录具有相同的 device_uuid(记录 2/3),但它们具有不同的性别。我想使用我向您展示的第一个查询,但如果记录有性别,我希望获得该结果,而不是没有性别的结果。
感谢您提前提供的任何帮助
最佳答案
取自 this answer :
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
请注意该答案的警告:
Since version 5.7, the
sql-mode
setting includesONLY_FULL_GROUP_BY
by default, so to make this work you must not have this option (edit the option file for the server to remove this setting).
进一步说明,this answer也可能为您提供另一种可能的解决方案的一些指导。
关于MYSQL优先选择GROUP BY选择哪条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48952308/