Имам участие в 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)