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;
你好有一个数据集,其中包含产品、站点、站点、日期和一些数字字段,例如 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;