【发布时间】:2015-07-29 22:40:15
【问题描述】:
我知道这个问题已经被打死了,并且我已经彻底研究过,但建议的解决方案似乎都不起作用!
我正在尝试按一个字段分组,并按另一个日期字段排序。所以,这是我必须开始的:
select cm.CreatedDate, cm.Id, cm.CampaignId, cm.ContactId
from campaignmember as cm
where cm.ContactId = '0035000002MYN7IAAX';
现在,我想对这些进行分组,保留最近创建日期所在行的值。我已经尝试了我在网上看到的所有各种解决方案:
1)我们首先查询和排序的子查询,然后我们有一个外部查询组。它不起作用:
select cm.CreatedDate, cm.Id, cm.CampaignId, cm.ContactId
From (select * from campaignmember as cm where ContactId = '0035000002MYN7IAAX' order by cm.CreatedDate desc) as cm
group by cm.ContactId;
2) 使用 Max() 函数。正如我们所料,我们得到了最大日期,但不是关联的行:
select max(cm.CreatedDate), cm.Id, cm.CampaignId, cm.ContactId
From campaignmember as cm
where cm.ContactId = '0035000002MYN7IAAX';
3) 最后一个建议我可以看到它是如何工作的,但我们开始吧:
select max(cm.CreatedDate), cm.Id, cm.CampaignId, cm.ContactId
From campaignmember as cm
where cm.ContactId = '0035000002MYN7IAAX'group by cm.ContactId
order by max(cm.CreatedDate) desc;
这让我发疯(一直如此)。我不认为这会这么难...任何建议都会非常非常感谢!
【问题讨论】:
-
避免仅按选定字段的一部分进行分组。这是对不应滥用的 sql 标准的强大后期补充。 10 年来,我一直在创建高级查询,而真正需要它的只有一次。
标签: mysql sql group-by sql-order-by