我有一个oder表(在MySQL数据库中)列出了订单的打开和关闭日期和时间。对于打开的订单,关闭日期和时间是空白的。
以下是该表的示例:
Order OPEN CLOSED
1 2002-06-17 18:37:27 2002-07-05 16:37:27
2 2003-05-16 18:37:27 2003-06-28 16:37:27
3 2004-06-15 18:37:27 2004-07-23 16:37:27
4 2003-07-14 18:37:27 2003-07-18 16:37:27
5 2002-08-13 18:37:27 2002-09-27 16:37:27
6 2004-09-12 18:37:27 2005-07-19 16:37:27
7 2005-10-11 18:37:27 2006-07-18 16:37:27
8 2006-11-10 18:37:27 2006-12-06 16:37:27
9 2007-12-11 18:37:27 2008-07-04 16:37:27
10 2009-01-12 18:37:27
11 2015-02-13 18:37:27 2015-07-17 16:37:27
我想创建一个查询,告诉我白天打开的订单数量。然后我想平均每月开盘的数字,这样我就可以查看未结订单的月份或月份趋势。
我知道我可以查询任何一天并确定未结订单的数量,因此我可以创建一个程序,每天执行此操作,然后将每日总计插入到我可以平均的数据库中。
我想知道是否有一个纯SQL解决方案。上面的表格是否有办法编写一个查询,结果是按月打开订单的平均数量?
答案 0 :(得分:1)
获取每日订单:
getResponders
答案 1 :(得分:1)
首先,您需要一个日期表,以便进行left join
使用select Generate days from date range
此MSQL
中的使用存储过程然后你做这样的事情
我必须将您的样本数据修改为一个月,因为我只创建了一个月的日期表。
select day_id, count(order_id) total_open
from
(
select *
from
days d left join
orders o
on d.day_value >= date(o.o_open)
and (
o.o_close is null -- still open
or d.day_value <= o.o_close
)
order by day_id
) as open_byday
group by day_id
如果您关闭当天的订单,则会考虑当天的订单 D 。我的意思是在关闭之前那天开放一段时间。
否则您必须更改为or d.day_value < o.o_close