それは簡単でしょう。 max()は必要ありません また、DISTINCT このために:
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;
あなたの質問は不完全だと思います。必要に応じて:
ページに最後にアクセスした6人の最新の訪問者
次に、サブクエリが必要です。 DISTINCT ONでも、1つのクエリレベルでこの並べ替え順序を取得することはできません。 、またはウィンドウ関数を使用する場合:
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;
サブクエリsub ユーザーごとに最新の訪問を取得します(ただし、2か月以内で、特定の訪問者の場合は取得しません21 。 ORDER BY DISTINCT ONと同じ先頭の列が必要です 。
次に、6人の最新の訪問者を取得するには、外部クエリが必要です。
イベントのシーケンスを検討してください:
なぜNULLS LAST ?確かに、テーブル定義を提供していません。