我有一个水果表,有2列日期和数量。它指示将水果添加到库存的日期。
产品按照先进先出的原则出售。
如果我想基于FIFO原理卖40个苹果,对于以下情况,我要编写什么sql查询?我希望记录1,2,3将被退回
+-id-+----date----+---quantity--+
1 | 02/05/2015 | 10
2 | 03/05/2015 | 20
3 | 04/05/2015 | 30
4 | 05/05/2015 | 30
select * from fruit where quantity less than < 40 order by date asc
//returns record 1 and 2 only.
答案 0 :(得分:0)
日期字段的数据类型是什么? 如果是varchar,则必须使用mysql date函数,然后执行查询,其他解决方案是FIFO原理也可以使用id来实现
select * from fruit where quantity < 40 order by id asc
答案 1 :(得分:0)
date
是MySQL中的关键字。您应该避免使用它作为表名。否则在其周围使用反引号尝试(适用于所有MySQL版本):
SELECT dt.id,
dt.`date`,
dt.quantity
FROM
(
SELECT
f.id,
f.`date`,
f.quantity,
@barrier := CASE
WHEN
(@tot_qty := @tot_qty + f.quantity) >= 40
THEN (@barrier + 1)
ELSE 0
END AS barrier
FROM
Fruit AS f
CROSS JOIN (SELECT @tot_qty := 0,
@barrier := 0) AS user_init
ORDER BY f.`date`
) AS dt
WHERE dt.barrier <= 1