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

如何将含QUEUE_TYPE_ID和REQUEST_DATE的SQL表转换为FROM-TO列结构

SQL 相邻行映射转换实现方案

最优实现(支持 MySQL 8.0+/PostgreSQL/SQL Server/Oracle 等所有支持窗口函数的数据库)

核心用LEAD窗口函数直接取排序后的下一行值,无需额外CASE判断,天然符合需求中无后续行时返回NULL的规则:

SELECT 
    QUEUE_TYPE_ID AS QUEUE_TYPE_ID_FROM,
    LEAD(QUEUE_TYPE_ID) OVER (ORDER BY REQUEST_DATE ASC) AS QUEUE_TYPE_ID_TO,
    REQUEST_DATE AS REQUEST_DATE_FROM,
    LEAD(REQUEST_DATE) OVER (ORDER BY REQUEST_DATE ASC) AS REQUEST_DATE_TO
FROM 
    替换为你的实际表名
-- 如需和示例输出一致按日期倒序展示,新增以下排序语句
ORDER BY REQUEST_DATE DESC;

兼容老版本数据库实现(如 MySQL 5.x 不支持窗口函数的场景)

用自关联+子查询实现同等逻辑:

SELECT 
    t1.QUEUE_TYPE_ID AS QUEUE_TYPE_ID_FROM,
    t2.QUEUE_TYPE_ID AS QUEUE_TYPE_ID_TO,
    t1.REQUEST_DATE AS REQUEST_DATE_FROM,
    t2.REQUEST_DATE AS REQUEST_DATE_TO
FROM 
    替换为你的实际表名 t1
LEFT JOIN 
    替换为你的实际表名 t2 
    ON t2.REQUEST_DATE = (
        SELECT MIN(REQUEST_DATE) 
        FROM 替换为你的实际表名 t3 
        WHERE t3.REQUEST_DATE > t1.REQUEST_DATE
    )
ORDER BY t1.REQUEST_DATE DESC;

逻辑说明

两种方案都是先按REQUEST_DATE从小到大排序,为每一行匹配日期比它大的最近一行数据作为TO列的值,没有匹配行时TO列自动为NULL,输出结果和需求给出的示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:03