Postgresql不同的问题

时间:2015-03-03 10:53:50

标签: sql postgresql

它需要接收creation_date排序的唯一配置文件。有以下查询:

SELECT DISTINCT profiles.id, COALESCE(occured_at, users_visitors.created_at, visitors.created_at) creation_date FROM "profiles" 
JOIN "visitors" ON "visitors"."profile_id" = "profiles"."id" 
LEFT JOIN events ON profiles.id = events.profile_id 
LEFT JOIN event_kinds ON event_kinds.id = events.event_kind_id 
LEFT JOIN users_visitors ON visitors.id = users_visitors.visitor_id 
WHERE (event_kinds.name = 'enter') AND "users_visitors"."user_id" = 2 
ORDER BY creation_date asc
一旦它被用于订购,

DISTINCT ON (profiles.id)将无济于事。 GROUP BY profiles.id, ...不起作用。

请问你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

GROUP BY有用吗?或者你想要哪个creation_date - 如果不是最大的那个?

SELECT profiles.id,
       MAX(COALESCE(occured_at,
                    users_visitors.created_at,
                    visitors.created_at)) creation_date
FROM "profiles" 
  JOIN "visitors" ON "visitors"."profile_id" = "profiles"."id" 
  LEFT JOIN events ON profiles.id = events.profile_id 
  LEFT JOIN event_kinds ON event_kinds.id = events.event_kind_id
                        AND event_kinds.name = 'enter'
  LEFT JOIN users_visitors ON visitors.id = users_visitors.visitor_id
                           AND "users_visitors"."user_id" = 2
GROUP BY profiles.id
ORDER BY creation_date asc

请注意我是如何移动where子句条件以使LEFT JOINLEFT JOIN的形式执行的。