mysql - DISTINCT ON query w/ ORDER BY max value of a column -
i've been tasked converting rails app mysql postgres asap , ran small issue.
 active record query:
current_user.profile_visits.limit(6).order("created_at desc").where("created_at > ? , visitor_id <> ?", 2.months.ago, current_user.id).distinct
produces sql:
select  visitor_id, max(created_at) created_at, distinct on (visitor_id) * "profile_visits" "profile_visits"."social_user_id" = 21 , (created_at > '2015-02-01 17:17:01.826897' , visitor_id <> 21) order created_at desc, id desc limit 6   i'm pretty confident when working mysql i'm new postgres. think query failing multiple reasons.
- i believe distinct on needs first.
 - i don't know how order results of max function
 - can use max function this?
 
the high level goal of query return 6 recent profile views of user. pointers on how fix activerecord query (or it's resulting sql) appreciated.
the high level goal of query return 6 recent profile views of user.
that simple. don't need max() nor distinct this:
select *   profile_visits  social_user_id = 21 ,    created_at > (now() - interval '2 months') ,    visitor_id <> 21  -- ?? order  created_at desc nulls last, id desc nulls last limit  6;   i suspect question incomplete. if want:
 the 6 latest visitors latest visit page
 need subquery. cannot sort order in 1 query level, neither distinct on, nor window functions:
select *  (    select distinct on (visitor_id) *      profile_visits     social_user_id = 21    ,    created_at > (now() - interval '2 months')    ,    visitor_id <> 21  -- ??    order  visitor_id, created_at desc nulls last, id desc nulls last    ) sub order  created_at desc nulls last, id desc nulls last limit  6;   the subquery sub gets latest visit per user (but not older 2 months , not visitor21. order by must have same leading columns distinct on.
you need outer query 6 latest visitors then.
 consider sequence of events:
why nulls last? sure, did not provide table definition.
Comments
Post a Comment