簡體   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