繁体   English   中英

从当前日期获取下一个15天的数据

[英]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-282014-12-312015-01-032015-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM