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

如何用LIMIT和OFFSET获取不同提供商的有序唯一记录序列?

实现按不同Provider分页获取Contacts记录的SQL方案

要实现你需要的「每页记录均来自不同provider,且支持LIMIT/OFFSET分页」的需求,我们可以通过先对Provider进行排序编号,再基于编号范围筛选+每个Provider仅取一条记录的思路来实现。下面分步骤说明方案,并提供适配不同数据库的代码示例。

核心思路

  1. 先给所有唯一的Provider分配一个连续的排序编号,这样我们就能用OFFSET和LIMIT来定位要获取的Provider范围;
  2. 针对选中的Provider范围,从Contacts表中为每个Provider提取一条记录(比如最新的那条,你可以按需调整筛选逻辑);
  3. 最终返回的结果每页都是不同Provider的记录,且分页逻辑按Provider的排序顺序推进。

代码示例

方案1:支持QUALIFY子句的数据库(PostgreSQL、BigQuery、Snowflake等)

WITH ranked_providers AS (
    -- 给所有唯一的Provider分配排序编号,这里按provider名称排序,可换成创建时间等字段
    SELECT DISTINCT provider,
           ROW_NUMBER() OVER (ORDER BY provider) AS provider_rank
    FROM contacts
)
SELECT c.*
FROM contacts c
JOIN ranked_providers rp ON c.provider = rp.provider
-- 定位当前分页对应的Provider编号范围:OFFSET+1 到 OFFSET+LIMIT
WHERE rp.provider_rank BETWEEN (:offset + 1) AND (:offset + :limit)
-- 确保每个Provider仅返回一条记录,这里按id降序取最新的一条,可按需修改排序逻辑
QUALIFY ROW_NUMBER() OVER (PARTITION BY c.provider ORDER BY c.id DESC) = 1
-- 按Provider的排序编号输出,保证分页顺序稳定
ORDER BY rp.provider_rank;

方案2:不支持QUALIFY的数据库(MySQL等)

如果你的数据库不支持QUALIFY,可以用子查询实现相同逻辑:

WITH ranked_providers AS (
    SELECT DISTINCT provider,
           ROW_NUMBER() OVER (ORDER BY provider) AS provider_rank
    FROM contacts
),
ranked_contacts AS (
    SELECT c.*,
           -- 给每个Provider下的记录编序号,取第一条
           ROW_NUMBER() OVER (PARTITION BY c.provider ORDER BY c.id DESC) AS contact_rank
    FROM contacts c
    JOIN ranked_providers rp ON c.provider = rp.provider
    WHERE rp.provider_rank BETWEEN (:offset + 1) AND (:offset + :limit)
)
SELECT *
FROM ranked_contacts
WHERE contact_rank = 1
ORDER BY provider_rank;

效果说明

  • 当LIMIT=4且OFFSET=0时:返回排序后前4个不同Provider的各一条记录;
  • 当LIMIT=4且OFFSET=4时:返回排序后第5-8个不同Provider的各一条记录;
  • 如果你需要调整Provider的排序规则,只需要修改ranked_providers里的ORDER BY字段即可(比如换成ORDER BY created_at DESC按Provider的首次出现时间倒序);
  • 若需要每个Provider返回多条记录,只需去掉QUALIFY或contact_rank=1的限制,但要注意此时同一Provider的多条记录会出现在同一页,不符合你「每个序列内记录均来自不同provider」的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:18:15