Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Mysql 如何平均最近5笔交易的最后金额_Mysql_Limit - Fatal编程技术网

Mysql 如何平均最近5笔交易的最后金额

Mysql 如何平均最近5笔交易的最后金额,mysql,limit,Mysql,Limit,我有两个事务表和一个产品表。product表有一个名为product的列。事务表有一个名为amount的列。我想得到每种产品最后5笔交易的平均值。到目前为止,我已经有了这一点,但无法找到一个声明来让它抓住每个不同产品的最后5个: SELECT avg(amount) as price, p.product_name, p.producer FROM wp_transactions t JOIN wp_products p ON t.product_ID = p.ID WHERE t.status

我有两个事务表和一个产品表。product表有一个名为product的列。事务表有一个名为amount的列。我想得到每种产品最后5笔交易的平均值。到目前为止,我已经有了这一点,但无法找到一个声明来让它抓住每个不同产品的最后5个:

SELECT avg(amount) as price, p.product_name, p.producer
FROM wp_transactions t
JOIN wp_products p
ON t.product_ID = p.ID
WHERE t.status = 'approved'
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;

可以通过使用变量枚举行来完成此操作:

SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
             (@rn := if(@p = t.Product_Id, @rn + 1,
                        if(@pr := t.Product_Id, 1, 1)
                       )
             ) as seqnum
      FROM wp_transactions t CROSS JOIN
           (SELECT @rn := 0, @p := 0) vars
      WHERE t.status = 'approved'
      ORDER BY t.product_ID, t.datetime
     ) t JOIN
     wp_products p
     ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;

可以通过使用变量枚举行来完成此操作:

SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
             (@rn := if(@p = t.Product_Id, @rn + 1,
                        if(@pr := t.Product_Id, 1, 1)
                       )
             ) as seqnum
      FROM wp_transactions t CROSS JOIN
           (SELECT @rn := 0, @p := 0) vars
      WHERE t.status = 'approved'
      ORDER BY t.product_ID, t.datetime
     ) t JOIN
     wp_products p
     ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;

可以通过使用变量枚举行来完成此操作:

SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
             (@rn := if(@p = t.Product_Id, @rn + 1,
                        if(@pr := t.Product_Id, 1, 1)
                       )
             ) as seqnum
      FROM wp_transactions t CROSS JOIN
           (SELECT @rn := 0, @p := 0) vars
      WHERE t.status = 'approved'
      ORDER BY t.product_ID, t.datetime
     ) t JOIN
     wp_products p
     ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;

可以通过使用变量枚举行来完成此操作:

SELECT avg(amount) as price, p.product_name, p.producer
FROM (SELECT t.*,
             (@rn := if(@p = t.Product_Id, @rn + 1,
                        if(@pr := t.Product_Id, 1, 1)
                       )
             ) as seqnum
      FROM wp_transactions t CROSS JOIN
           (SELECT @rn := 0, @p := 0) vars
      WHERE t.status = 'approved'
      ORDER BY t.product_ID, t.datetime
     ) t JOIN
     wp_products p
     ON t.product_ID = p.ID
WHERE seqnum <= 5
GROUP BY p.product_name
ORDER BY p.producer ASC, p.product_name ASC;

出于好奇-如果有seqnum@zerkms,优化不是更容易吗。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反之亦然,那么至少可以减少结果集的物化子查询的大小。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反之亦然,那么至少可以减少结果集的物化子查询的大小。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反之亦然,那么至少可以减少结果集的物化子查询的大小。我认为在MySQL中,这将减少物化子查询的大小,因此效率会更高一些。但是,我不确定having子句如何与group by以及变量交互,因此我不确定这是否真的有效。having节点在group by之后应用,因此对于group by它不存在。因此,使用它的潜在优势在于,如果优化器不够聪明,无法从外部查询中推送谓词,或者反过来推送谓词,那么至少可以减少结果集,从而减小物化子查询的大小。