昨天第一次看到的 Postgres select 记录

Postgres select records first seen yesterday

我正在尝试 select 所有在最后一天首次看到的记录以及一些其他聚合,但我无法弄清楚,因为 where 子句中不允许聚合。

这是我的尝试:

SELECT  m.m_id, 
        m, 
        SUM(count) AS e_count, 
        COUNT(DISTINCT(c_code)) AS c_count 
FROM e 
  LEFT JOIN m ON e.m_id = m.m_id 
WHERE   MIN(e_t::date) = current_date - INTERVAL '1' day 
GROUP BY 1 
ORDER BY 3 DESC;

我也尝试过使用子查询,但没有成功。任何想法如何做到这一点?

您只需要将逻辑放在 HAVING 子句中:

SELECT m.m_id, m, SUM(count) AS e_count, 
       COUNT(DISTINCT(c_code)) AS c_count 
FROM e LEFT JOIN
     m
     ON e.m_id = m.m_id 
GROUP BY 1 
HAVING MIN(e_t::date) = current_date - INTERVAL '1' day 
ORDER BY 3 DESC;

但是,您可能会发现在聚合之前过滤效率更高。您可以使用 WHERE 子句和 NOT EXISTS:

SELECT m.m_id, m, SUM(count) AS e_count, 
       COUNT(DISTINCT(c_code)) AS c_count 
FROM e LEFT JOIN
     m
     ON e.m_id = m.m_id 
WHERE NOT EXISTS (SELECT 1
                  FROM e e2
                  WHERE e2.m_id = e.m_id AND
                        e_t::date < current_date - INTERVAL '1' day 
                 )
GROUP BY 1 
ORDER BY 3 DESC;