/ / Как да получавам записи от последния месец (не последните 30 дни) в mysql заявка [дубликат] - mysql, sql, datetime

Как да запиша от последния месец (не за последните 30 дни) в mysql query [duplicate] - mysql, sql, datetime

Имам участие в MySQL заявка, където трябва да избера записи за последния месец, но не и за последните 30 дни

Например, ако текущият месец е Ян, тогава трябва да имам записи от последния месец, който ще бъде декември, но отново той трябва да показва само записите от декември 2017 г. и не включва предишни години.

В момента използвам следната SQL част за същото.

$sql .= " AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";

и той показва записите за всички Decembers в базата данни, т.е. декември 2017 г., декември 2016 г. и така нататък.

Дори опитах следното

$sql .= " YEAR(checkup_date) AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";

но ще работи само ако миналия месец не е по-рано от Ян т.е. ще работи, ако текущият месец е февруари, така че миналия месец ще бъде ян, а годината ще бъде 2018

но в моя случай текущият месец е Ян, така че миналия месец ще бъде Дек, но годината тук е 2018, така че не е "не е спечелено" и не показва всички записи.

Така че, момчета, моля да ми помогнете да коригирам тази заявка, така че да получа последната година, в случай че текущият месец е Ян, а в друг случай, годината остава текущата година.

Оценявайте вашата помощ при решаването му.

Отговори:

2 за отговор № 1

Това е заявката за получаване на всички редове в таблица, принадлежаща към миналия месец в mysql:

SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

Алтернативата е:

SELECT * FROM table
WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL
1 MONTH)

2 за отговор № 2

Можете просто да направите:

where checkup_date < curdate() - interval (1 - day(curdate())) day and
checkup_date >= (curdate() - interval (1 - day(curdate())) day) - interval 1 month

Като не използвате функции включени checkup_date, тогава методът може да се възползва от подходящ индекс, който е h като тази колона.


0 за отговор № 3

да получи миналия месец "s

select DATE_ADD("2018-01-10", INTERVAL -1 MONTH)