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

SQL无公共ID时如何合并符合条件的连续两行数据

SQL实现方案

实现逻辑

直接基于表中已经存在的连续RowNum字段做自连接,关联条件为前一行的RowNum等于后一行RowNum减1,之后过滤符合「前一行Value首字符为2、后一行Value首字符为3」的行对,最后拼接字段返回即可。

通用SQL代码(适用于MySQL/PostgreSQL等支持CONCAT函数的数据库)

假设你的表名为data_records,代码如下:

SELECT
  CONCAT(a.RowNum, '-', b.RowNum) AS RowNums,
  CONCAT(a.Value, ', ', b.Value) AS `Values`
FROM data_records a
JOIN data_records b
  ON a.RowNum = b.RowNum - 1
WHERE
  -- 前一行Value以2开头,Value为数值类型时需要先转字符串
  LEFT(CAST(a.Value AS CHAR), 1) = '2'
  -- 后一行Value以3开头
  AND LEFT(CAST(b.Value AS CHAR), 1) = '3'

特殊场景适配

无现成RowNum字段的情况

如果原表没有提供连续排序的RowNum,可先通过窗口函数生成排序序号再处理:

WITH ordered_data AS (
  SELECT
    -- 替换ORDER BY后面的字段为你表中用来确定记录顺序的字段
    ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNum,
    Value
  FROM data_records
)
SELECT
  CONCAT(a.RowNum, '-', b.RowNum) AS RowNums,
  CONCAT(a.Value, ', ', b.Value) AS `Values`
FROM ordered_data a
JOIN ordered_data b
  ON a.RowNum = b.RowNum - 1
WHERE
  LEFT(CAST(a.Value AS CHAR), 1) = '2'
  AND LEFT(CAST(b.Value AS CHAR), 1) = '3'

不同数据库的语法差异

  • Oracle 字符串拼接可直接用||运算符,示例:a.RowNum || '-' || b.RowNum
  • SQL Server 可使用+做字符串拼接,示例:CAST(a.RowNum AS VARCHAR(10)) + '-' + CAST(b.RowNum AS VARCHAR(10))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:18:03