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年来,我一直在创建预先查询,真正需要它的只有一次。