PAYATHON 2026

如何筛选属性值全部为 A 的日期?

数据小陈

结论

按 date 分组后,可以在 HAVING 中统计属性值不等于 A(包括 NULL)的记录,只保留统计结果为 0 的日期。给定数据中,结果是 2026-01-04。

SQL 写法

SELECT date
FROM t
GROUP BY date
HAVING COUNT(*) FILTER (
    WHERE attribute IS DISTINCT FROM 'A'
) = 0;

GROUP BY date 会将同一天的记录归为一组。IS DISTINCT FROM 'A' 会把非 A 值和 NULL 都视为与 A 不同,FILTER 则只统计这些记录。统计结果为 0 的日期会被保留。

示例中,2026-01-03 有一条 B 记录,2026-01-05 的属性值为 C,因此这两个日期都会被排除。2026-01-04 的两条记录都是 A,符合条件。重复记录不会影响筛选结果。

注意事项

此写法适用于 PostgreSQL。如果 attribute 列不允许为 NULL,条件也可以写成 attribute <> 'A'。如果该列允许 NULL,保留 IS DISTINCT FROM 可明确将空值视为不匹配。

备注:内容仅供参考。