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 返回重复数据,不能使用 DISTINCT