Det skulle vara enkelt. Du behöver inte max()
inte heller DISTINCT
för detta:
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;
Jag misstänker att din fråga är ofullständig. Om du vill:
de 6 senaste besökarna med sitt senaste besök på sidan
då behöver du en underfråga. Du kan inte få den här sorteringsordningen på en frågenivå, inte heller med DISTINCT ON
, inte heller med fönsterfunktioner:
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;
Underfrågan sub
får det senaste besöket per användare (men inte äldre än två månader och inte för en viss besökare21
. ORDER BY
måste ha samma inledande kolumner som DISTINCT ON
.
Du behöver den yttre frågan för att få de 6 senaste besökarna då.
Tänk på händelseförloppet:
Varför NULLS LAST
? För att vara säker, angav du inte tabelldefinitionen.