[英]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.