sql >> Databáze >  >> RDS >> Mysql

DISTINCT ON dotaz w/ ORDER BY max. hodnota sloupce

To by bylo jednoduché. Nepotřebujete max() ani DISTINCT pro toto:

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;

Mám podezření, že vaše otázka je neúplná. Pokud chcete:
6 nejnovějších návštěvníků s poslední návštěvou stránky
pak potřebujete dílčí dotaz. Toto pořadí řazení nemůžete získat na jedné úrovni dotazu, ani s DISTINCT ON , ani s funkcemi 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;

Poddotaz sub získá poslední návštěvu na uživatele (ale ne starší než dva měsíce a ne pro určitého návštěvníka21 . ORDER BY musí mít stejné úvodní sloupce jako DISTINCT ON .

K získání 6 nejnovějších návštěvníků pak potřebujete vnější dotaz.
Zvažte sled událostí:

Proč NULLS LAST ? Pro jistotu jste nezadali definici tabulky.




  1. BadImageFormatException. K tomu dojde při spuštění v 64bitovém režimu s nainstalovanými 32bitovými klientskými součástmi Oracle

  2. Číselný sloupec MySQL s omezením rozsahu:jak?

  3. Dynamické vytváření polí formuláře a ukládání do databáze php mysql

  4. Řekněte svým uživatelům, aby se sami rozloučili