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

如何编写SQL Query实现结果集重复5次且逐次移除首行?

解决方案:生成逐次移除前一行的重复结果集

要实现把原数据集重复5次且每次移除前一行的需求,我们可以通过生成数字序列并关联原表的方式来完成,下面是具体的SQL实现:

基础版本(假设ID是连续递增的)

如果你的原表ID是连续的(就像示例里的1-5),可以用递归CTE生成1到5的行号序列,再和原表关联过滤:

WITH numbers AS (
    SELECT 1 AS row_id
    UNION ALL
    SELECT row_id + 1 FROM numbers WHERE row_id < 5
)
SELECT 
    n.row_id,
    t.ID,
    t.Value
FROM numbers n
JOIN your_table t ON t.ID >= n.row_id
ORDER BY n.row_id, t.ID;

代码解释:

  • numbers CTE通过递归生成了1到5的序列,对应你需要的5次输出批次;
  • 关联条件t.ID >= n.row_id确保每个批次只保留ID大于等于当前批次号的行,自动实现“每次移除前一行”的效果;
  • 最后按row_id和ID排序,就能得到和你期望一致的输出格式。

通用版本(适配非连续ID场景)

如果原表的ID不是连续的,或者你想严格按照原表的行顺序来过滤,我们可以先给原表数据添加行号,再用同样的逻辑处理:

WITH ranked_data AS (
    SELECT 
        ID,
        Value,
        ROW_NUMBER() OVER (ORDER BY ID) AS rn  -- 这里的ORDER BY可以根据实际行顺序调整
    FROM your_table
),
numbers AS (
    SELECT 1 AS row_id
    UNION ALL
    SELECT row_id + 1 FROM numbers WHERE row_id < 5
)
SELECT 
    n.row_id,
    r.ID,
    r.Value
FROM numbers n
JOIN ranked_data r ON r.rn >= n.row_id
ORDER BY n.row_id, r.rn;

代码解释:

  • ranked_data CTE用ROW_NUMBER()给原表的每一行按顺序分配行号rn,这里的ORDER BY ID可以替换成你实际需要的行排序规则(比如创建时间等);
  • 后续的关联逻辑和基础版本一致,通过rn >= n.row_id来逐次过滤掉前面的行,确保输出符合需求。

这两个方案都能完美生成你期望的结果集,你可以根据自己的表结构选择合适的版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:16:40