2011-07-27 44 views
2

我有一个产品表,股票领域和表示上一次的产品已经更新一个时间戳字段。MySQL的一点点帮助有条件

我需要编写一个查询,查看库存量大于或等于0的所有产品,检查时间戳和当前时间之差是否小于30天。如果stock = 0且datediff(now(),timestamp)> 30,则从记录集中排除产品。

到目前为止,我已经写了一个查询(见下文),但它是不正确的,这将排除即使股票> 0时,他们还没有在过去30天内被更新的产品。

select * from products where stock>=0 and datediff(now(), timestamp)>=30; 

回答

2

难道你想要什么?

SELECT * FROM products WHERE stock > 0 OR stock = 0 AND DATEDIFF(NOW(), timestamp) <= 30; 

stock如果字段是无符号的,条件的股票= 0'可以被移除。

+0

哇,完全想念我!毕竟这是简单的。谢了哥们。 – bikey77

+0

来到发布这...这是缺少一些括号或条件? – Randy

+0

是这个查询是错误的 –

1

编辑:

根据您的评论,这里就是答案 很神秘的问题

SELECT * FROM products WHERE stock > 0 
OR (stock = 0 and DATEDIFF(NOW(), timestamp) <= 30); 
+0

重点是获得库存= 0的产品,但最近更新(在过去30天内)。为了获得更大的图像,我们有30天的时间边际来考虑停产的产品,并且当股票被设置为零时开始。 – bikey77

1
SELECT * FROM products 
WHERE 
     stock>0 
OR (
     stock=0 
     AND datediff(now(), timestamp)<=30 
); 
+0

现在这一个我可以阅读,而不是问它是否正确:) – Randy

+0

@Randy,你的意思是因为日期的比较是错误的方向,所以你知道它不正确? – jswolf19