Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да групирате по DESC ред

Ако искате последния id за всеки asker , тогава трябва да използвате агрегатна функция:

SELECT max(id) as id, 
   asker
FROM questions 
GROUP by asker 
ORDER by id DESC

Причината, поради която получавате необичайния резултат е, защото MySQL използва разширение за GROUP BY което позволява елементите в избран списък да бъдат неагрегирани и да не бъдат включени в клаузата GROUP BY. Това обаче може да доведе до неочаквани резултати, тъй като MySQL може да избере стойностите, които се връщат. (Вижте Разширения на MySQL към GROUP BY )

От MySQL Docs:

Сега, ако сте имали други колони, които трябва да върнете от таблицата, но не искате да ги добавяте към GROUP BY поради непоследователните резултати, които бихте могли да получите, тогава можете да използвате подзаявка, за да направите това. (Демо )

select 
  q.Id,
  q.asker,
  q.other -- add other columns here
from questions q
inner join
(
  -- get your values from the group by
  SELECT max(id) as id, 
    asker
  FROM questions 
  GROUP by asker 
) m
  on q.id = m.id
order by q.id desc


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL избира топ X записи за всеки индивид в таблицата

  2. MySQL таблиците имат ли нужда от ID?

  3. защо това не изтегля данни от 7 дни назад?

  4. MySQL wait_timeout променлива - GLOBAL срещу SESSION

  5. Вмъкнете уникални низове от 8 произволни знака