Таблица
id | usr | how | dt
-----------------------------
1 | 101 | 10 | 2016-10-16
-----------------------------
2 | 101 | 20 | 2016-10-16
-----------------------------
3 | 101 | 30 | 2016-10-17
Нужно сделать такой запрос:
SELECT id,how, MONTH(dt) AS `dt` FROM stat WHERE usr = '101' GROUP BY YEAR(dt), MONTH(dt)
Но выдаёт в группировке первые строки, типа id 1, а по сути надо id 3. ORDER BY id DESC
не помогает
Пробовал так, но тоже нет
SELECT * from ( SELECT id,how, MONTH(dt) AS `dt` FROM stat WHERE usr = '101' ORDER BY id DESC) AS te GROUP BY YEAR(te.dt), MONTH(te.dt) ORDER BY te.id DESC
Большинство СУБД (и MySQL при включенной опции only_full_group_by) вообще бы выдали вам ошибку на такой запрос. Потому, что использовать в выводе колонки без групповых функций, не включенные в фразу group by нельзя (в MySQL можно, но результат непредсказуем). Необходимо явно объяснить SQL какое значение из нескольких в группе вы хотите получить.
Используйте агрегатные функции, например:
SELECT max(id) as id, max(how) as how, MONTH(dt) AS `dt`
FROM stat WHERE usr = 101
GROUP BY YEAR(dt), MONTH(dt)
А для получения последних (по id) записей каждого месяца можно сделать так:
select *
from table A
join (select max(id) from table where usr=101
group by extract(year_month from dt)) B
on A.id=B.id
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Запрос SELECT * FROM families WHERE id = '65ae3ee2-aeb2-427f-8381-56db91b94363' OR fam_code = '65ae3ee2-aeb2-427f-8381-56db91b94363' возвращает две записи: