Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按日期范围和productId对MySQL查询进行分组_Mysql_Sql - Fatal编程技术网

按日期范围和productId对MySQL查询进行分组

按日期范围和productId对MySQL查询进行分组,mysql,sql,Mysql,Sql,因此,我试图修改我的sql代码(参见下面当前结果+sql的屏幕截图),以按月对数据进行分组,并汇总所有paymentSplitAmounts。每一行都应该是唯一的productId 所以最终的结果是 productID total month 1 500 11-2011 2 650 11-2011 3 250

因此,我试图修改我的sql代码(参见下面当前结果+sql的屏幕截图),以按月对数据进行分组,并汇总所有paymentSplitAmounts。每一行都应该是唯一的productId

所以最终的结果是

    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
我似乎不能理解正确的语法。我哪里做错了



你已经提到了“分组”。为此,您需要将
groupby
添加到查询中,按productid和月份对数据进行分组,然后您可以添加
sum
对paymentSplitAmount进行合计

分组语法没有错,它完全丢失了。:)

这假定cp.paymentDate已包含月份。如果没有,你必须将每个日期四舍五入到月的第一天,并按该日期分组


现在按月分组。

看起来您希望分组,然后对结果进行排序:

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_格式按照您的需要设置日期格式。

首先,根据您提供的查询,如果没有其他信息,表产品将无效

我会这样做:

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

这不会产生预期的结果:(这是因为对月份进行了分组,就像我在上一句中告诉你的那样。请参阅编辑。这非常接近。特别是如果你将productId添加到select语句中。问题是它只显示10月份的数据,而忽略了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
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