2012-03-06 3 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_prodotto равна NULL, означает, что продукт не был приобретен в этот период.

+0

GREAT! БЛАГОДАРЯ! НО ... ВОПРОС: зачем мне использовать И после того, как я использовал Left Join ??? ..IT'S в первый раз, когда я вижу предложение AND в предложении соединения – Seojudo

+1

@Seojudo И после LEFT JOIN означает, что вы присоединяетесь как к id_prodotto, так и к записям, которые соответствуют критериям даты. Вы могли бы также разместить это в предложении WHERE – Taryn

+0

Что сказал @bluefeet :) Я мог бы использовать круглые скобки, поэтому было бы более очевидно –

0

Вы можете использовать date_add функции для достижения этой

Ex:

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

OP хочет продукты, которые не покупаются за последние 30 дней. Это ЛЕВЫЙ ПРИСОЕДИНЯЙТЕСЬ. Если вы отфильтруете предложение 'WHERE', продукты, которые не купили вообще, будут опущены, но они должны появиться –

0

Кроме того,

where myDate between some_date and some_other_date

может помочь вам в других подобных ситуациях.

Смежные вопросы