#mysql #database #ms-access
#mysql #База данных #ms-access
Вопрос:
Я конвертирую ms в MySQL и сталкиваюсь со следующей проблемой, вот мой запрос ms:
FROM `history_card`
GROUP BY `history_card`.`SERIAL_NUMBER`
HAVING (((LAST(`history_card`.`DUE_CAP_CHECK_DATE`)) Between Date() And Date()-60))
ORDER BY LAST(`history_card`.`DUE_CAP_CHECK_DATE`) DESC;
это дает мне 13 записей
, вот MySQL:
FROM `history_card`
GROUP BY `history_card`.`SERIAL_NUMBER`
HAVING (((MAX(`history_card`.`DUE_CAP_CHECK_DATE`)) BETWEEN (MAX(`history_card`.`DUE_CAP_CHECK_DATE`)) AND DATE_ADD((MAX(`history_card`.`DUE_CAP_CHECK_DATE`)), INTERVAL -60 DAY) ))
ORDER BY MAX(`history_card`.`DUE_CAP_CHECK_DATE`) DESC;
итак, проблема с BETWEEN, как я могу сделать Mysql эквивалентом: Between Date() And Date()-60)
Я попробовал это:
BETWEEN (MAX(`history_card`.`DUE_CAP_CHECK_DATE`)) AND DATE_ADD((MAX(`history_card`.`DUE_CAP_CHECK_DATE`)), INTERVAL -60 DAY)
но он не возвращает никаких записей
Комментарии:
1. Попробуйте написать что-то, что сначала компилируется.
Date()
это не функция T-SQL. Также попробуйте исправить сам запрос. Фильтрация вHAVING
предложении принудительно выполняет полное сканирование таблицы в обеих базах данных. Вы ищете последнюю запись для каждого серийного номера, который попадает в диапазон? Почему бы не использоватьWHERE
then?2. да, я хочу получить последние записи, должен ли я использовать WHERE вместо HAVING?
3. Date() в ms access возвращает текущую дату. В MySQL функция curdate() делает то же самое.
Ответ №1:
Я думаю, это то, что вы хотите (изменение формата для ясности):
FROM `history_card`
GROUP BY `history_card`.`SERIAL_NUMBER`
HAVING MAX( `history_card`.`DUE_CAP_CHECK_DATE` )
BETWEEN CURDATE()
AND DATE_ADD( CURDATE(), INTERVAL -60 DAY )
ORDER BY MAX( `history_card`.`DUE_CAP_CHECK_DATE` ) DESC;