我需要关于MySQL的帮助...我有以下查询,每5分钟拉取数据一次。但是我需要随着时间的推移将收入加到前一个小时,并在一天结束时给出最终的收入。所以每一行的收入都是sum of the revenue for that timestamp+previous hours total in the current row.
SELECT o.creation_date,
ROUND(SUM(((it.current_price*quantity)- IFNULL(it.total_adjustment,0))/100),0) AS reven,
COUNT(o.order_id)
FROM order.order o
JOIN order.order_item it ON o.order_id=it.order_id
WHERE DATE(o.creation_date)='2014-09-16'
AND o.order_status = "confirmed"
AND it.line_item_type = 'item'
GROUP BY round(UNIX_TIMESTAMP(o.creation_date)/300);发布于 2014-09-18 13:39:23
给你一个样本来解决你的主要问题,假设你有一个orders表,里面有这样的收入:
create table orders
(creation_date datetime,
reven decimal(20,2))
;
insert into orders (creation_date,reven)values
(curdate()+ INTERVAL 1 MINUTE ,100),
(curdate()+ INTERVAL 2 MINUTE ,100),
(curdate()+ INTERVAL 60 MINUTE ,100),
(curdate()+ INTERVAL 61 MINUTE ,100),
(curdate()+ INTERVAL 62 MINUTE ,100),
(curdate()+ INTERVAL 120 MINUTE ,100),
(curdate()+ INTERVAL 121 MINUTE ,100),
(curdate()+ INTERVAL 122 MINUTE ,100)第一步是让所有日期在五分钟内领先(lead_date)。然后将orders表加入到每个lead_date的一个小时内。
select o1.lead_date,sum(reven) as reven
from (select distinct FROM_UNIXTIME(round(UNIX_TIMESTAMP(creation_date)/300)*300) as lead_date
from orders) o1
inner join orders o2
on o2.creation_date >= o1.lead_date
and o2.creation_date < (o1.lead_date + INTERVAL 1 HOUR)
group by o1.lead_date结果如下:
LEAD_DATE REVEN
September, 18 2014 00:00:00+0000 200
September, 18 2014 01:00:00+0000 300
September, 18 2014 02:00:00+0000 300我认为您可以将这种方法应用到您的案例中,将revnen替换为(it.current_price*quantity)- IFNULL(it.total_adjustment,0),将您的order和order_item表作为子查询来替换o2。
https://stackoverflow.com/questions/25904380
复制相似问题