MySQL按订单分组

MySQL按订单分组,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,我知道这个问题已经被打得要死,我也做了彻底的研究,但建议的解决方案似乎都不管用 我试图按一个字段分组,并按另一个日期字段排序。所以,我必须从这里开始: select cm.CreatedDate, cm.Id, cm.CampaignId, cm.ContactId from campaignmember as cm where cm.ContactId = '0035000002MYN7IAAX'; 现在,我想对这些数据进行分组,保留最近创建日期所在行的值。我已经尝试了我在网上看到的各

我知道这个问题已经被打得要死,我也做了彻底的研究,但建议的解决方案似乎都不管用

我试图按一个字段分组,并按另一个日期字段排序。所以,我必须从这里开始:

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;

这让我发疯(一直如此)。我不认为这会这么难。。。任何建议都将非常非常感谢

您可以尝试以下方法:

select cm.CreatedDate, cm.Id, cm.CampaignId, cm.ContactId 
from campaignmember as cm where cm.ContactId = '0035000002MYN7IAAX'
and cm.CreatedDate = (select max(c.CreatedDate) from campaignmember c 
                      where c.ContactId = cm.ContactId);

希望对您有所帮助=)

避免仅按选定字段的一部分进行分组。这是对sql标准的一个强大的后期补充,不应滥用。10年来,我一直在创建预先查询,真正需要它的只有一次。