2012-03-06 68 views
0

我是日期SQL操作中的新手。使用SQL和日期操作

但是,我需要做一个查询,返回X日期<或30天或类似的记录过滤器。

我有这个疑问现在:

SELECT nome_prodotto,quantita 
FROM prodotti 
LEFT JOIN acquisti 
    ON prodotti.id_prodotto = acquisti.id_prodotto 

我的目标是获得未在上次买30天或类似

回答

1

如果acquisti日期字段称为date_acquisti,在最近30天内没有购买的产品将被查询这样的:

SELECT nome_prodotto,quantita 
FROM prodotti 
LEFT JOIN acquisti 
    ON (prodotti.id_prodotto = acquisti.id_prodotto 
     AND acquisti.date_acquisti > CURDATE() - INTERVAL 30 DAY) 
where acquisti.id_prodotto is NULL 

诀窍是使用JOIN condition得到只有在产品收购最近30天。由于这是LEFT JOIN,因此acquisti.id_prodottoNULL的结果集中的任何行表示该产品未在该期间购买。

+0

很棒!谢谢!但..ONE问题:为什么我需要在使用左连接后使用AND? ..这是我第一次看到连接子句 – Seojudo 2012-03-06 16:42:37

+1

@Seojudo中的AND子句,并且在LEFT JOIN后的AND意味着您要加入id_prodotto和符合日期标准的记录。你也可以把它放在WHERE子句中 – Taryn 2012-03-06 16:57:05

+0

@bluefeet说了什么:)我可以使用括号,所以它会更明显 – 2012-03-06 21:24:42

0

可以使用date_add函数来实现这个

产品

例如:

x_date between DATE_ADD(NOW(), INTERVAL -1 MONTH) and NOW() 
2
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) =< your_date; 
+0

OP希望在过去30天内不购买的产品。这是一个LEFT JOIN。如果你在'WHERE'条款中过滤,那么完全没有购买的产品将被排除,但它们应该出现 – 2012-03-06 16:11:47

0

此外,

where myDate between some_date and some_other_date

可以帮助你在其他类似的情况。