我正在使用 SUM 将其中一个字段相加,但对于其余字段,我希望那些来自最新条目的字段。
当前查询:
SELECT cu.*,
SUM(cu.use_count) AS total_use_count
FROM coupons_used cu
GROUP BY cu.coupon_id;
当前结果:
Array
(
[0] => stdClass Object
(
[id] => 1
[timestamp] => 2015-05-08 04:52:31
[coupon_id] => 133
[user_id] => 104
[use_count] => 1
[redemption_code] => 123412341234
[total_use_count] => 2
)
)
该时间戳来自第一个条目,我希望它来自最后一个条目。我尝试同时添加 ORDER BY cu.timestamp
ASC
和 DESC
但我得到了相同的结果。 total_use_count
需要保持原样,但如何让其余字段来自最后一个条目(当然是每个分组)?
最佳答案
如果 (coupon_id,timestamp)
元组是唯一的(也就是说,如果我们保证没有两(或更多)行具有相同的 timestamp
值对于给定的 coupon_id,至少对于“最新”时间戳)...
SELECT c.id
, c.timestamp
, c.coupon_id
, c.user_id
, c.use_count
, c.redemption_code
, m.total_use_count
FROM ( SELECT MAX(mt.timestamp) AS latest_timestamp
, SUM(mt.use_count) AS total_use_count
, mt.coupon_id
FROM coupons_used mt
GROUP BY mt.coupon_id
) m
JOIN coupons_uses c
ON c.coupon_id = m.coupon_id
AND c.timestamp = m.latest_timestamp
如果 (coupon_id,timestamp)
不是唯一的;如果给定的 coupon_id 可能有两行具有相同的时间戳,并且如果我们只想为每个 coupon_id 返回一行...
我们可以使用 GROUP BY
的 MySQL 扩展并添加到查询的末尾:
GROUP BY c.coupon_id
关于mysql SUM 聚合与 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146629/