2017-10-07 74 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)将保证你得到的日期/时间范围内精确的结果,无论是存储数据的日期/时间精度。

相关问题