如何平均最近 5 笔交易的最后金额
How to average last amount of last 5 transactions
我有两个交易 table 和一个产品 table。产品 table 有一个名为 "product" 的列。事务 table 有一个名为 "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;
我有两个交易 table 和一个产品 table。产品 table 有一个名为 "product" 的列。事务 table 有一个名为 "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;