假设我有一个order_items
表来跟踪items
的销售额:
CREATE TABLE `items` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`stock` int(11) NOT NULL,
`price` decimal(8,2) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `order_items` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order_id` int(10) unsigned NOT NULL,
`item_id` int(10) unsigned DEFAULT NULL,
`quantity` int(11) NOT NULL,
`price` decimal(8,2) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `order_items_order_id_index` (`order_id`),
KEY `order_items_item_id_index` (`item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如何根据特定时间段的过去销售额创建可以返回估算的库存数量消耗率的查询?
例如,如果item_id
1
在2周内卖出了一半的股票(基于created_at
时间戳),我该怎么把它放到一个查询中,告诉我在另一个2周应该没有剩余数量?
是否也可以通过单个查询中的时间跨度对耗尽率进行分组?
这是我的小提琴: http://sqlfiddle.com/#!2/c568f
答案 0 :(得分:1)
这是一个基本查询,可以获取销售商品的数量以及销售商品所需的天数:
SELECT Item_ID
,SUM(Quantity) As TotalSold
,DATEDIFF(MAX(Created_AT),MIN(Created_At)) AS Days_To_Sell
FROM order_items
GROUP BY Item_ID
如果您想要更复杂的分析而不是简单的耗尽率,您可能希望合并一个日历表,这样您就可以在给定的时间段内按项目轻松细分所有销售,但您也可以添加日期部分到您的SELECT
和GROUP BY
,例如WEEK()
,MONTH()
等。
演示:SQL Fiddle
答案 1 :(得分:0)
这是一个不那么基本的查询,它可以获取所有项目,当前库存,过去两周的销售量以及如果能够持续运行2周后会有多少库存:
SELECT i.id,
i.stock AS current_stock,
COALESCE(SUM(o.quantity), 0) AS orders_last_2_weeks,
i.stock - COALESCE(SUM(o.quantity), 0) AS stock_after_2_weeks
FROM items AS i
LEFT OUTER JOIN order_items o
ON o.item_id = i.id
AND o.created_at > NOW() - INTERVAL 2 WEEK
GROUP BY i.id
http://sqlfiddle.com/#!2/08754/6
我不得不在你的小提琴上调整日期,因为过去两周没有任何订单结束。