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

如何实现SQL查询按指定list_id交替返回单条记录?

实现交替循环返回指定list_id的记录

嘿,我懂你想要的效果——让查询结果按照2557→2562→2559的顺序循环输出单条记录,而不是把某个list_id的所有记录堆在一起。咱们可以借助窗口函数ROW_NUMBER()来实现这个逻辑,具体思路如下:

  1. 给每个list_id分组内的记录分配递增序号,保留你原本按last_local_call_time排序的规则;
  2. 先按这个序号排序,再按咱们指定的list_id优先级排序,这样每个序号下的记录都会按2557、2562、2559的顺序出现,形成循环交替的效果。

修改后的SQL语句如下:

WITH ranked_leads AS (
    SELECT 
        a.lead_id,
        a.status,
        a.[user],
        a.list_id,
        a.last_local_call_time,
        a.owner,
        -- 给每个list_id分组内的记录按原排序规则分配序号
        ROW_NUMBER() OVER (PARTITION BY a.list_id ORDER BY a.last_local_call_time) AS group_rank
    FROM [LEADS].[dbo].[LDS_VICIDIAL_LIST] a 
    INNER JOIN leads.dbo.LDS_CONTACT_STATUS b ON a.[status] = b.[status] 
    WHERE 
        list_id IN ('2557','2562','2559') 
        AND Dialable='Y' 
        AND a.status<>'5NI' 
        AND a.called_since_last_reset = 'n'
)
SELECT 
    lead_id,
    status,
    [user],
    list_id,
    last_local_call_time,
    owner
FROM ranked_leads
ORDER BY 
    group_rank, -- 先按组内序号排序,确保每个循环轮次取各组的第N条记录
    -- 自定义list_id的优先级,实现2557→2562→2559的循环顺序
    CASE list_id 
        WHEN '2557' THEN 1 
        WHEN '2562' THEN 2 
        WHEN '2559' THEN 3 
    END;

逻辑说明:

  • ROW_NUMBER() OVER (PARTITION BY a.list_id ORDER BY a.last_local_call_time):把每个list_id的记录单独分组,每组内按你原本的last_local_call_time排序,给每条记录分配一个组内序号(比如2557组的第一条是1,第二条是2;2562组同理)。
  • 外层排序时,先按group_rank排序,这样所有组的第1条记录会先被筛选出来,再按CASE定义的顺序排列(2557→2562→2559);接着是所有组的第2条记录,同样按这个顺序排列,以此类推,完美实现你要的循环交替效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:18