已加入SQL查询最大聚合条件

已加入SQL查询最大聚合条件,sql,postgresql,Sql,Postgresql,我在SQL查询方面遇到问题。以下是我在SQL Fiddle上的模式表示: 问题是,我想从邀请函表返回数据行,并将它们与关联事件中的“已发送”事件类型和“已查看”事件类型以及最新创建的日期的总和连接起来 我可以得到所有的数据和计数工作,但我有问题的最后发送。有没有一种方法可以在最大聚合函数中使用条件? e、 g 如果没有,我将如何编写正确的子选择 我目前正在使用Postgresql 谢谢。尝试使用子查询来生成发送的最大值 SELECT i.id, i.name, i.em

我在SQL查询方面遇到问题。以下是我在SQL Fiddle上的模式表示:

问题是,我想从邀请函表返回数据行,并将它们与关联事件中的“已发送”事件类型和“已查看”事件类型以及最新创建的日期的总和连接起来

我可以得到所有的数据和计数工作,但我有问题的最后发送。有没有一种方法可以在最大聚合函数中使用条件? e、 g

如果没有,我将如何编写正确的子选择

我目前正在使用Postgresql


谢谢。

尝试使用子查询来生成发送的最大值

SELECT
    i.id,
    i.name,
    i.email,
    sent.last_sent,
    sum(case when e.event_type='sent' then 1 else 0 end) AS sent_count,
    sum(case when e.event_type='viewed' then 1 else 0 end) AS view_count
FROM
    invitations i
LEFT OUTER JOIN
    events e
    ON e.eventable_id = i.id
LEFT JOIN ( SELECT eventable_id uid, MAX(created_at) AS last_sent
            FROM events 
            WHERE event_type = 'sent'
            GROUP BY eventable_id ) AS sent
  ON sent.uid = i.id
WHERE e.eventable_type='Invitation'
GROUP BY i.id, i.name, i.email, sent.last_sent

您可以在max中使用case语句,就像使用sum一样。下面的查询将为
事件选择在
处创建的最大
。\u type='sent'

SELECT
    i.id,
    i.name,
    i.email,
    max(case when e.event_type='sent' then e.created_at end) AS last_sent_on,
    sum(case when e.event_type='sent' then 1 else 0 end) AS sent_count,
    sum(case when e.event_type='viewed' then 1 else 0 end) AS view_count
FROM
    invitations i
LEFT OUTER JOIN
    events e
    ON e.eventable_id = i.id
WHERE e.eventable_type='Invitation'
GROUP BY i.id, i.name, i.email

我不知道为什么我认为将案例陈述放入最大聚合中是行不通的。。。谢谢非常感谢。然而,我更喜欢上面列出的案例陈述方式。
SELECT
    i.id,
    i.name,
    i.email,
    max(case when e.event_type='sent' then e.created_at end) AS last_sent_on,
    sum(case when e.event_type='sent' then 1 else 0 end) AS sent_count,
    sum(case when e.event_type='viewed' then 1 else 0 end) AS view_count
FROM
    invitations i
LEFT OUTER JOIN
    events e
    ON e.eventable_id = i.id
WHERE e.eventable_type='Invitation'
GROUP BY i.id, i.name, i.email