Mysql получить строки между датой, разделенной между столбцами года и месяца - PullRequest
2 голосов
/ 11 июля 2011

У меня есть таблица с годом и месяцем в разных столбцах, и мне нужно найти все строки между 3 месяцами назад и сейчас.

SELECT * FROM `table` 
 WHERE DATE(CONCAT(`year`, '-', `month`, '-01')) >= 
          DATE_FORMAT(NOW() - INTERVAL 3 MONTH, '%Y-%m-01')

Это кажется довольно многословным и, возможно, неэффективным, поскольку этоэто очень большой стол.Есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 11 июля 2011

Нет особой оптимизации, когда дата сохраняется как отдельные поля, но я бы переписал ваш запрос следующим образом:

SELECT * 
  FROM `table` 
 WHERE STR_TO_DATE(`year`+ '-'+ `month` + '-01', '%Y-%m-%d') >= DATE_SUB(NOW(), INTERVAL 3 MONTH)

Объединение делает индексацию по столбцам year и month бесполезной.

Для получения дополнительной информации о функциях даты MySQL см .: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

2 голосов
/ 29 февраля 2012

Ну, у меня была та же проблема, и я решил, что я думаю, что решение для этого случая.

SELECT * 
FROM table
WHERE (month >= (month(curdate()) - 3 AND year >= year(curdate())) 
      AND (month >= month(curdate()) AND year >= year(curdate())))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...