Получить последнюю запись каждого месяца в MySQL ....? - PullRequest
14 голосов
/ 11 апреля 2011

У меня проблема с написанием запроса для 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 APRIL record # 8

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

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

Ответы [ 4 ]

8 голосов
/ 11 апреля 2011
SELECT * FROM table 
WHERE created_on in 
(select DISTINCT max(created_on) from table 
GROUP BY YEAR(created_on), MONTH(created_on))
5 голосов
/ 11 апреля 2011

Построение ответа Дхера:

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)

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

2 голосов
/ 11 апреля 2011

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

SELECT * from table where created_on IN (Select MAX(created_on) FROM table
GROUP BY YEAR(created_on), MONTH(created_on) )
2 голосов
/ 11 апреля 2011

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

SELECT *, MAX(created_on) FROM table
GROUP BY YEAR(created_on), MONTH(created_on) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...