MySQL使用Group Bu返回不正确的值[重复]

Posted

技术标签:

【中文标题】MySQL使用Group Bu返回不正确的值[重复]【英文标题】:MySQL Returning Incorrect Values using Group Bu [duplicate] 【发布时间】:2014-01-06 01:10:15 【问题描述】:

我正在尝试从活动表中为帐户中的每个用户选择最新的 RowID。但是每次我运行查询时,它都会返回正确的 RowID,但其他信息似乎是随机选择的,因为主题和日期总是来自较早的 RowID。

为什么 mysql 会选择正确的最新 RowID,然后返回 SubjectDate 等的随机值。

`

SELECT 
MAX(activities.rowid) as RowID,
contacts.firstname as First, 
contacts.lastname as Last,
activities.visiondescription as Subject,
smsreceived as Date
FROM activities, contacts 
WHERE activities.contactid=contacts.contactid 
AND activities.accountid=contacts.accountid
AND activities.accountid = 'AAXA-S0BJ7I'
group by activities.RowID;

有人知道我做错了什么吗? 我尝试过按活动使用分组。ContactID、活动.SMSReceived 仍然没有乐趣。

谢谢

【问题讨论】:

因为这就是 GROUP BY 的工作原理 而且,我要补充一点,MySQL 有关于这种非标准 SQL 扩展的明确文档 (dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html)。 肯定有一种方法可以获取与 Max(rowid) 关联的正确值,否则数据库就没有用了... @Strawberry 分享的链接有帮助吗?如果不是,我建议您编辑您的问题以解释您卡在哪里。 我不明白你的问题出在哪里。 【参考方案1】:

试试这样的:

SELECT contacts.contact_id,       
   contacts.firstname as First,
   contacts.lastname  as Last,
   GROUP_CONCAT(DISTINCT IF(activities.rowid = MAX(activities.rowid),visiondescription,NULL))  AS Subject
   GROUP_CONCAT(DISTINCT IF(activities.rowid = MAX(activities.rowid),smsreceived,NULL)) AS `Date`
FROM activities, contacts 
WHERE activities.contactid=contacts.contactid 
AND activities.accountid=contacts.accountid
AND activities.accountid = 'AAXA-S0BJ7I'
GROUP BY contacts.contact_id;

这里的想法是所需的信息与用户有关,因此 GROUP BY 需要针对用户。 GROUP_CONCAT 将只挑选出符合 IF 条件的分组行中的那一行。

--只是一个想法

【讨论】:

以上是关于MySQL使用Group Bu返回不正确的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql中去重 用group by优化distinct 用法

解析mysql中:单表distinct多表group by查询去除重复记录

MySQL 的 GROUP_CONCAT 函数详解

MySQL - GROUP_CONCAT 返回重复数据,不能使用 DISTINCT

使用 MAX() 和 GROUP BY 没有返回正确的结果[重复]

在 MYSQL 中使用 NOT IN 和 GROUP CONCAT