[英]Getting next 15 days data from current date
我想从当前日期获得接下来的15天数据。 我已经使用了这样的查询
SELECT bom.bid,
bom.item,
bom.cost,
bom.location,
work_order_line_items.id,
work_order_line_items.item,
Date(work_order_line_items.required_date) AS date,
Sum(work_order_line_items.quantity) AS TQTY,
items.item_id,
items.in_stock
FROM bom
INNER JOIN work_order_line_items
ON bom.item = work_order_line_items.item
INNER JOIN items
ON work_order_line_items.item = items.item_id
WHERE Date(work_order_line_items.required_date) =
Date_add(Curdate(), INTERVAL 15 day)
GROUP BY work_order_line_items.required_date
在required_date i列具有数据.. 2014-12-28
, 2014-12-31
, 2015-01-03
, 2015-01-07
但是在运行查询后我没有得到任何结果。 有人可以建议我在哪里错了吗?
您在此查询中有三个问题。
首先,您在WHERE
子句中使用了相等而不是不等式。 所以你只会选择未来十五天的日期。
其次, WHERE
子句会在required_date
列上使用索引,从而required_date
进行表扫描。 如果你的桌子上有几十个项目,这没关系,但是如果你得到成千上万,你的表现就会受到影响。
一个更好的WHERE
子句可能是这样的:
WHERE work_order_line_items.required_date >= CURDATE()
AND work_order_line_items.required_date < CURDATE() + INTERVAL 16 DAY
这将从当天午夜开始到十六天午夜之前结束所有物品。 它可以通过您对required_date
列的索引进行范围扫描来实现。
第三,你滥用了对GROUP BY的MySQL扩展。 您将在结果集中获得不可预测的值。 读这个。 http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html
这是GROUP BY子句的更好版本。 请注意,它会提到结果集中除聚合列之外的所有列。
GROUP BY bom.bid,
bom.item,
bom.cost,
bom.location,
work_order_line_items.id,
work_order_line_items.item,
DATE(work_order_line_items.required_date),
items.item_id,
items.in_stock
问题出在WHERE
子句中。 您正在使用=
表示您将来只检查具有required_date
15天的项目。 将=
更改为<=
。
提示:如果您现在只需要从现在到15天的工作订单,请添加另一个仅在今天之后选择日期的条件: Date(work_order_line_items.required_date) >= Curdate()
。
就像现在一样 - 它只查看记录,表中你的日期在15天后匹配。 您可能想尝试将Where子句更改为:
WHERE DATE(work_order_line_items.required_date) between CURDATE() and DATE_ADD(CURDATE(),INTERVAL 15 DAY)
那应该会给你一个接下来15天的日期范围。
你也可以使用> =和<=:
WHERE (DATE(work_order_line_items.required_date) >= CURDATE()) AND (DATE(work_order_line_items.required_date) <= DATE_ADD(CURDATE(),INTERVAL 15 DAY))
这些将在接下来的15天内为您提供,并排除今天之前的任何数据(其中<=将为您提供包括过去几天在内的所有内容)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.