2011-11-04 106 views
0

所以我试图改变我的sql代码(请参阅下面的截图当前结果+ sql)按月分组数据和总结所有paymentSplitAmounts。每一行应该是唯一的productId按日期范围和产品ID分组MySQL查询

所以,最终的结果会是这样的

productID  total  month 
    1    500   11-2011 
    2    650   11-2011 
    3    250   11-2011 
    1    100   10-2011 
    2    150   10-2011 
    3    750   10-2011 

我似乎无法得到正确的语法。我哪里错了?


http://imgur.com/UC5Si

select 
     cpd.paymentId, cpd.paymentId, cpd.productId, cpd.paymentSplitAmount, cp.campaignId, cp.paymentDate 
    from campaign_payment_detail cpd 
    inner join 
     campaign_payment cp on cp.paymentId = cpd.paymentId 
    inner join product on cpd.productId = product.productId 
    where 
    1=1 
    and cp.campaignId = 2413 

回答

1

看起来要分组,然后将结果排序:

SELECT cpd.productId, SUM(cpd.paymentSplitAmount), DATE_FORMAT(cp.paymentDate, '%b-%Y') 
    FROM campaign_payment_detail cpd 
    JOIN campaign_payment cp ON cp.paymentId = cpd.paymentId 
    JOIN product ON cpd.productId = product.productId 
WHERE cp.campaignId = 2413 
GROUP BY cpd.productId, DATE_FORMAT(cp.paymentDate, '%b-%Y') 
ORDER BY cp.paymentDate DESC, cpd.productId ASC 

编辑:使用DATE_FORMAT像要格式化的日期。

+0

这并没有真正发挥出效果: http://imgur.com/O35M7,Ts7YD,FKqOm#2 –

+0

编辑,再试一次 – MoshiBin

+0

我们有一个赢家!非常感谢这是完美的! –

0

您已经提到的 '分组'。为此,您需要将group by添加到您的查询中,按照productid和月份对数据进行分组,然后您可以添加sum来总计paymentSplitAmount。

分组语法没有错,完全缺失。 :)

select 
    cpd.productId, sum(cpd.paymentSplitAmount) as total, date_format(cp.paymentDate, '%m-%Y') 
from campaign_payment_detail cpd 
inner join campaign_payment cp on cp.paymentId = cpd.paymentId 
inner join product on cpd.productId = product.productId 
where 
    cp.campaignId = 2413 
group by cp.productId, date_format(cp.paymentDate, '%m-%Y') 
order by date_format(cp.paymentDate, '%m-%Y') desc, cp.productId 

此假定cp.paymentDate已包含月份。如果没有,你将不得不将每个日期四舍五入到月份的第一个月,然后按照它来分组。

现在按月分组。

+0

http://imgur.com/O35M7,Ts7YD ,FKqOm#0 这不会产生预期的结果。 :( –

+0

这是因为分组的几个月,就像我在最后一句话中告诉过你的那样。见编辑。 – GolezTrol

1

首先,根据您所提供的查询,没有其他信息,该表的产品是没用..

我会做到这一点:

select 
     cpd.paymentId, 
     SUM(cpd.paymentSplitAmount) as total, 
     cp.campaignId, 
     cp.paymentDate 
    from campaign_payment_detail cpd 
    inner join 
     campaign_payment cp on cp.paymentId = cpd.paymentId 
    where 
    cp.campaignId = 2413 
GROUP BY cpd.productId, cp.paymentDate 
ORDER BY cpd.paymentId ASC, cp.paymentDate DESC 
+0

这是真的关闭 http://imgur.com/O35M7,Ts7YD,FKqOm#1 特别是如果你添加productId到选择声明,问题在于它只显示十月份的数据,而忽略一月份的数据 –

+0

我不知道你的表结构如何,试着读取我删除的内部连接... :) – Marcx