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

DISTINCT ON zapytanie z ORDER BY max wartość kolumny

To byłoby proste. Nie potrzebujesz max() ani DISTINCT w tym celu:

SELECT *
FROM   profile_visits
WHERE  social_user_id = 21
AND    created_at > (now() - interval '2 months')
AND    visitor_id <> 21  -- ??
ORDER  BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT  6;

Podejrzewam, że twoje pytanie jest niekompletne. Jeśli chcesz:
6 ostatnich odwiedzających z ich ostatnią wizytą na stronie
to potrzebujesz podzapytania. Nie możesz uzyskać tej kolejności sortowania na jednym poziomie zapytania, ani w przypadku DISTINCT ON , ani z funkcjami okna:

SELECT *
FROM  (
   SELECT DISTINCT ON (visitor_id) *
   FROM   profile_visits
   WHERE  social_user_id = 21
   AND    created_at > (now() - interval '2 months')
   AND    visitor_id <> 21  -- ??
   ORDER  BY visitor_id, created_at DESC NULLS LAST, id DESC NULLS LAST
   ) sub
ORDER  BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT  6;

Podzapytanie sub pobiera ostatnie odwiedziny na użytkownika (ale nie starsze niż dwa miesiące i nie dla określonego użytkownika21 . ORDER BY musi mieć takie same wiodące kolumny jak DISTINCT ON .

Potrzebujesz wtedy zewnętrznego zapytania, aby uzyskać 6 ostatnich odwiedzających.
Rozważ kolejność zdarzeń:

Dlaczego NULLS LAST ? Dla pewności nie podałeś definicji tabeli.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić dane do MySQL z automatycznym przyrostem klucza podstawowego?

  2. Usuń klucz obcy tylko, jeśli istnieje

  3. LazyInitializationException próbuje uzyskać leniwą zainicjowaną instancję

  4. Czy lepiej użyć pustej wartości jako „” czy jako NULL?

  5. Jak mogę rejestrować tylko nieprzetworzone zapytania w MySQL?