Intereting Posts
Пользовательский created_at и использовать только custom created_at Мой PHP-код закомментирован Расширение PHP PDO недоступно в командной строке Любой способ вернуть PHP `json_encode` с кодировкой UTF-8, а не Unicode? Удалите автоматически добавленную <p> со страницы, которая не имеет литерального содержимого (использует короткие коды) Контрольные контроллеры в Symfony2 с доктриной Как получить подкатегории в пользовательском меню на Magento Лучший способ загрузить php-классы в EC2 – InstanceStore, EBS или S3? как получить только нулевой счетчик элементов в массиве php PHP, JavaScript – правильно ли определять ширину экрана, перенаправляя заголовок Отправить письмо с помощью gmail smtp в zend? Объект не найден! Запрошенный URL-адрес не найден на этом сервере. локальный Исключение файлов из правил перезаписи htaccess Как вернуть подкласс из конструктора в PHP mysqli :: подготовить SQL-ошибку

Получить последнюю запись каждого месяца в MySQL …?

У меня возникла проблема с написанием запроса для MySQL. У меня есть следующие поля в БД

id created_on status 1 2011-02-15 12:47:09 1 2 2011-02-24 12:47:09 1 3 2011-02-29 12:47:09 1 4 2011-03-11 12:47:09 1 5 2011-03-15 12:47:09 1 6 2011-03-22 12:47:09 1 7 2011-04-10 12:47:09 1 8 2011-04-11 12:47:09 1 

Мне нужно select the last record of each month . Это означает, что month FEB record # 3 month MARCH record # 6 month FEB record # 3 month MARCH record # 6 и month APRIL record # 8

Пожалуйста, помогите мне…..

Заранее спасибо…..

Исходя из ответа Даэра:

 SELECT r.* FROM table AS r JOIN ( SELECT MAX(t.created_on) AS created_on FROM table AS t GROUP BY YEAR(t.created_on), MONTH(t.created_on) ) AS x USING (created_on) 

Убедитесь, что у вас есть индексы на created_on, иначе этот запрос убьет вашу базу данных, если эта таблица получит более нескольких сотен строк.

 SELECT * FROM table WHERE created_on in (select DISTINCT max(created_on) from table GROUP BY YEAR(created_on), MONTH(created_on)) 

Сначала вам нужно группироваться по годам и месяцам (в противном случае вы будете отфильтровывать месяцы в другие годы). Используйте MAX (), чтобы получить максимальную дату для каждой группы.

 SELECT *, MAX(created_on) FROM table GROUP BY YEAR(created_on), MONTH(created_on) 

Предполагая, что есть только одна запись за день;

 SELECT * from table where created_on IN (Select MAX(created_on) FROM table GROUP BY YEAR(created_on), MONTH(created_on) )