Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak pogrupować według kolejności DESC

Jeśli chcesz ostatni id dla każdego asker , powinieneś użyć funkcji agregującej:

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

Powodem, dla którego otrzymujesz nietypowy wynik, jest to, że MySQL używa rozszerzenia GROUP BY co pozwala na niezagregowanie pozycji na liście wyboru i nieuwzględnienie ich w klauzuli GROUP BY. Może to jednak prowadzić do nieoczekiwanych wyników, ponieważ MySQL może wybrać zwracane wartości. (Zobacz Rozszerzenia MySQL do GROUP BY )

Z dokumentacji MySQL:

Teraz, jeśli masz inne kolumny, które musisz zwrócić z tabeli, ale nie chcesz ich dodawać do GROUP BY ze względu na niespójne wyniki, które możesz uzyskać, możesz użyć do tego podzapytania. (Demonstracja )

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. Korzystanie z pól wirtualnych w cakePHP 2.x

  2. Jak za pomocą MySQL wybrać pozycję wyniku zapytania w jednym konkretnym wierszu?

  3. odejmij 1 od liczby w wierszu Zapytanie SQL

  4. Utwórz funkcję przez MySQLdb

  5. Jak uzyskać różnicę między kolejnymi wierszami w MySQL?