You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何删除第4个列组合之后的所有行

解决方案

针对你的需求,我们可以通过子查询筛选前4个唯一季度组合的方式实现,兼容PostgreSQL 6.10且支持跨年场景:

完整SQL代码

-- 保留前4个最新(year, quarter)组合的所有行
SELECT grouped.*
FROM (
    -- 替换为你的原始分组查询
    SELECT name, COUNT(*) AS count, quarter, year
    FROM original_data
    GROUP BY name, quarter, year
) grouped
JOIN (
    -- 获取排序后的前4个唯一季度组合
    SELECT DISTINCT year, quarter
    FROM (
        SELECT name, COUNT(*) AS count, quarter, year
        FROM original_data
        GROUP BY name, quarter, year
    ) temp
    ORDER BY year DESC, quarter DESC
    LIMIT 4
) top_quarters 
    ON grouped.year = top_quarters.year 
    AND grouped.quarter = top_quarters.quarter
-- 保持原排序逻辑
ORDER BY grouped.year DESC, grouped.quarter DESC, grouped.name;

逻辑说明

  1. 原始分组查询:内层第一个子查询是你原本的分组逻辑,生成包含name、count、quarter、year的结果集。
  2. 筛选前4个季度组合:第二个子查询从分组结果中提取唯一的(year, quarter)对,按year降序、quarter降序排序后取前4个——这会自动优先保留最新的季度(包括跨年场景,比如2023Q1会排在2022Q4之前)。
  3. 关联保留目标行:通过JOIN操作,只保留原始分组结果中属于这4个季度组合的行,最后按原排序规则输出。

适配跨年场景

当新的年度季度(如2023Q1)出现时,ORDER BY year DESC, quarter DESC会自动将其排在现有季度的最前面,LIMIT 4会自动替换掉最老的那个季度组合,无需修改代码。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:25:25