2017-10-07 69 views
0

我是SQL的新手,請耐心等待。我試圖在SQL中編寫一個查詢,它將輸出在特定日期內的所有記錄。在某些日期之間選擇並訂購ecords SQL

這是我此刻的代碼,但它不工作

SELECT 
    `Item`.`Item`, `products`.`date` 
FROM 
    `Item` 
LEFT JOIN 
    `products` ON `products`.`ItemCode` = `Item`.`ItemCode` 
ORDER BY 
    `products`.`date` >= '2017/02/25' AND `products`.`date` <= '2017/02/27' 
+2

標記您正在使用的特定類型的SQL:MySQL,PostgreSQL等? – treyhakanson

+0

你的查詢非常清楚MySQL的反引號,所以你應該用MySQL標記問題 - 總是指定dbms的類型 –

回答

1

你需要使用一個WHERE條款不是ORDER BY

SELECT `Item`.`Item`, `products`.`date` 
FROM `Item` 
    LEFT JOIN `products` ON `products`.`ItemCode` = `Item`.`ItemCode` 
WHERE `products`.`date` >= '2017/02/25' AND `products`.`date` <= '2017/02/27' 

ORDER BY使用要訂購查詢的結果,WHERE用於約束查詢實際檢索的行。

1

你應該以僅檢索所需的行使用WHERE,你也可以使用BETWEEN和您的查詢的末尾添加ORDER

SELECT `Item`.`Item`, `products`.`date` 
FROM `Item` 
JOIN `products` ON `products`.`ItemCode` = `Item`.`ItemCode` 
WHERE `products`.`date` BETWEEN '2017/02/25' AND '2017/02/27' ORDER BY products.date ASC 
1

其他人正確地where取代order by爲您的查詢,但我想討論的查詢的另一部分:將輸出的所有記錄落入特定日期內 是

我試圖做一個查詢在SQL 。

儘管這可能並不明顯,但數據的「精確度」可能會影響最佳實現日期範圍的方式。例如,如果你的數據是準確的,只是一個日期,然後WHERE products.date >= '2017/02/25' AND products.date <= '2017/02/27'WHERE products.date BETWEEN '2017/02/25' AND '2017/02/27'會選擇僅低於3個大膽行:但是,如果你的數據是精確到秒(或毫秒)你得到了不同的結果

 
    2017/02/24
    2017/02/25 
    2017/02/26 
    2017/02/27 
    2017/02/28 

,僅有2粗體行

 
    2017/02/24 12:13:14
    2017/02/25 12:13:14 
    2017/02/26 12:13:14 
    2017/02/27 12:13:14 
    2017/02/28 12:13:14 

要準確有關日期範圍不介乎使用或組合> =和< =(之間僅僅是> =和< =快捷方式)。使用這個來代替:

SELECT `Item`.`Item`, `products`.`date` 
FROM `Item` 
    LEFT JOIN `products` ON `products`.`ItemCode` = `Item`.`ItemCode` 
WHERE `products`.`date` >= '2017/02/25' AND `products`.`date` < '2017/02/28' 
 
    2017/02/24 12:13:14
    2017/02/25 12:13:14 
    2017/02/26 12:13:14 
    2017/02/27 12:13:14 this is less than '2017/02/28' 
    2017/02/28 12:13:14 

使用少於(大日期+ 1)將保證你得到的日期/時間範圍內精確的結果,無論是存儲數據的日期/時間精度。

相關問題