【问题标题】:MySQL Group by Order By StrugglingMySQL Group by Order By Struggling
【发布时间】: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


【解决方案1】:

你可以试试这个:

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);

希望能帮到你=)

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2021-02-22
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多