Postgres - 在 LOD 上选择 1 个最大行而不是同一个月的所有最大行(分组依据)

Postgres - Pick 1 max row instead of all max rows in the same month on a LOD (group by)

你好有一个数据集,其中包含产品、站点、站点、日期和一些数字字段,例如 sn_count、blob 等。 在产品、站点和站点的每个组合中,如果同一个月的不同日期有多个条目,我只想选择该月最大 sn 计数的一行。

我现在拥有的代码大部分都能正常工作。它会过滤掉该月 sn 计数较少的行。但它给了我所有具有相同最大 sn 计数的行。然而,我只想要一个月中的 1 个。

这是我的代码:

FROM insight_info_temp a
INNER JOIN
(
    SELECT distinct b.product_code,b.site_name,b.station_type,to_char(b.date_b, 'YYYY-MM') as date_new, 
    MAX(dist_sn_count_at_blob) as max_sn
    FROM insight_info_temp b
    GROUP BY b.product_code,b.site_name,b.station_type,to_char(b.date_b, 'YYYY-MM')
) b
    ON a.product_code = b.product_code and
    a.site_name = b.site_name and
    a.station_type = b.station_type and
    to_char(a.date_b, 'YYYY-MM') = b.date_new
    AND a.dist_sn_count_at_blob = b.max_sn
    where a.product_code = 'D00' 
    and a.site_name = 'F00' and a.station_type = 'A00';
    

这是我得到的结果:

突出显示的行具有相同的 sn 计数,并且是该月的最大 sn 计数。 然而,我只想要这些行之一。两者都不是。

我的猜测是您有两个相同的观察结果 dist_sn_count_at_blob

这是 PostgreSQL 的候选 distinct on

请尝试这样的操作:

select distinct on (product_code, site_name, station_type, 
                    to_char(date_b, 'YYYY-MM'))
       dist_sn_count_at_blob, last_updated_at_pkey, <other columns>
  from insight_info_temp 
 where a.product_code = 'D00' 
   and a.site_name = 'F00' 
   and a.station_type = 'A00'
 order by product_code, site_name, station_type, 
          to_char(date_b, 'YYYY-MM'), dist_sn_count_at_blob desc;