2012-03-06 71 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

可以幫助你在其他類似的情況。