我编写了一个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
我得到了这些结果:
正如您所看到的,有2条记录具有相同的device_uuid(记录2/3),但它们具有不同的性别。我想使用我向您展示的第一个查询,但如果记录有性别,我希望获得该结果,而不是没有性别的结果。
感谢您提前提供任何帮助
答案 0 :(得分:0)
取自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
记下答案的警告:
从版本5.7开始,默认情况下
sql-mode
设置包含ONLY_FULL_GROUP_BY
,因此要使其工作,您必须不拥有此选项(将服务器的选项文件编辑为删除此设置)。
进一步说明,this answer也可以为您提供另一种可能的解决方案。