MySQL通过虚拟列相邻行数据处理
创始人
2025-06-01 02:38:09
0

MySQL通过虚拟列相邻行数据处理

1、问题描述

需要比较同一个表中相邻两行的数据差异,做数据处理。

2、数据环境

表结构如下:

mysql> desc bigdata;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| str_info  | varchar(16) | YES  | MUL | NULL    |       |
| sys_date  | datetime    | YES  | MUL | NULL    |       |
| sys_year  | int(11)     | YES  |     | NULL    |       |
| sys_month | int(11)     | YES  |     | NULL    |       |
| sys_week  | int(11)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

数据如下所示:


mysql> select * from bigdata limit 3;
+------------------+---------------------+----------+-----------+----------+
| str_info         | sys_date            | sys_year | sys_month | sys_week |
+------------------+---------------------+----------+-----------+----------+
| 11A1EA00347BE1B6 | 2017-12-27 08:47:10 |     2017 |        12 |       52 |
| 7CEFF8E8ED098F65 | 2018-05-21 07:11:14 |     2018 |         5 |       20 |
| 96ABCEC7FDCE638C | 2018-12-17 09:29:18 |     2018 |        12 |       50 |
+------------------+---------------------+----------+-----------+----------+
3 rows in set (0.00 sec)

需求:
按时间排序后,把str_info相邻两行合并。

3、虚拟列

通过select @arownum:=0 做虚拟表,和数据表关联后,增加一个虚拟列rownum :

mysql> select @arownum:=@arownum+1 rownum,t.* from bigdata t,(select @arownum:=0) a order by t.sys_date limit 3;
+--------+------------------+---------------------+----------+-----------+----------+
| rownum | str_info         | sys_date            | sys_year | sys_month | sys_week |
+--------+------------------+---------------------+----------+-----------+----------+
|      1 | 13034E50378C24F9 | 2017-01-01 00:00:10 |     2017 |         1 |        1 |
|      2 | B7E9CA875F6D362E | 2017-01-01 00:00:16 |     2017 |         1 |        1 |
|      3 | 01EEAD2F6A7BB2A5 | 2017-01-01 00:00:16 |     2017 |         1 |        1 |
+--------+------------------+---------------------+----------+-----------+----------+
3 rows in set, 2 warnings (0.00 sec)

4、相邻行处理

在上面的语句上,做成两个临时表,利用行号差进行对比。
第一个临时表,select @arownum:=0,序号从1开始;
第二个临时表,select @brownum:=1,序号从2开始;
所以,按序号关联第一个临时表的当前,第二个临时表为之前。把信息字符串合并。

select t1.str_info cur_info, t1.sys_date cur_date,t2.sys_date
pre_date, t2.str_info pre_info ,concat(t1.str_info,t2.str_info) as
concatinof from (select @arownum:=@arownum+1 rownum,t.* from bigdata
t,(select @arownum:=0) a order by t.sys_date limit 5) t1 , (select
@brownum:=@brownum+1 rownum,t.* from bigdata t,(select @brownum:=1) b
order by t.sys_date limit 5) t2 where t1.rownum=t2.rownum;

mysql> select t1.str_info cur_info, t1.sys_date cur_date,t2.sys_date pre_date, t2.str_info pre_info ,concat(t1.str_info,t2.str_info) as concatinof from -> (select @arownum:=@arownum+1 rownum,t.* from bigdata t,(select @arownum:=0) a order by t.sys_date limit 5) t1 ,-> (select @brownum:=@brownum+1 rownum,t.* from bigdata t,(select @brownum:=1) b order by t.sys_date limit 5) t2-> where t1.rownum=t2.rownum;
+------------------+---------------------+---------------------+------------------+----------------------------------+
| cur_info         | cur_date            | pre_date            | pre_info         | concatinof                       |
+------------------+---------------------+---------------------+------------------+----------------------------------+
| B7E9CA875F6D362E | 2017-01-01 00:00:16 | 2017-01-01 00:00:10 | 13034E50378C24F9 | B7E9CA875F6D362E13034E50378C24F9 |
| 01EEAD2F6A7BB2A5 | 2017-01-01 00:00:16 | 2017-01-01 00:00:16 | B7E9CA875F6D362E | 01EEAD2F6A7BB2A5B7E9CA875F6D362E |
| DF5674B2AD590C2B | 2017-01-01 00:00:18 | 2017-01-01 00:00:16 | 01EEAD2F6A7BB2A5 | DF5674B2AD590C2B01EEAD2F6A7BB2A5 |
| 171A3E61A84EE8EC | 2017-01-01 00:00:18 | 2017-01-01 00:00:18 | DF5674B2AD590C2B | 171A3E61A84EE8ECDF5674B2AD590C2B |
+------------------+---------------------+---------------------+------------------+----------------------------------+
4 rows in set, 4 warnings (0.00 sec)mysql> 

MySQL通过虚拟列相邻行数据处理,重点还是在于rownum行号的处理上。

相关内容

热门资讯

省财政聚焦重点领域支持县域产业... 做优做强产业链是高质量发展和新型工业化的关键。2025年,省财政聚焦县域重点产业链,强化资金保障,累...
厦门银行队夺得2025-202... 1月2日晚,2025-2026中国羽毛球俱乐部超级联赛总决赛在长沙落幕,厦门银行队以3:1战胜辽宁极...
美股稀土、半导体等领涨,中概股... 美股迎来2026年首个交易日,1月2日三大指数表现涨跌不一。截至收盘,道琼斯工业指数较前一交易日上涨...
原创 堂... 方步舟,这个名字在中国革命的早期就已经深深地刻在历史的篇章上。1927年,当时中国革命风云激荡,年轻...
2025年A股IPO上市首日零... 来源:证券时报e公司 (原标题:2025年A股IPO上市首日零破发!76股单签浮盈过万,最高超36万...
百度确定分拆昆仑芯在港独立上市... 2026年港股第一个交易日,百度集团(BIDU.O,09888.HK,以下简称“百度”)甩出了一个大...
壁仞“开门红” 上市首日最高涨... 张文(右一)港交所敲锣。 1月2日,国产GPU厂商壁仞科技正式登陆港交所,成为港股“国产GPU第一...
视频丨免税店更快上新、游艇更受... 据海关统计,海南自贸港封关运作以来,截至2025年12月31日进口“零关税”货物达4.2亿元;加工增...
智慧医疗AI大模型医学影像诊断... 今天分享的是:智慧医疗AI大模型医学影像诊断智能识别应用方案(162页WORD) 报告共计:160页...
我国2026年起对进口牛肉采取... 来源:新华网 2025年12月31日,商务部发布公告,裁定进口牛肉数量增加,中国国内产业受到严重损害...
壁仞科技:港股开年首股,上市涨... 【1月2日壁仞科技港交所上市,股价大涨市值破千亿】1月2日,国产GPGPU稀缺标的壁仞科技(6082...
原创 1... 1947年8月7日,延安的居民们纷纷放下手中的农活,聚集在枣园,目睹一个难得的场面: 一个身着军装、...
从企业发展看艾多美的非传销轨迹 企业的发展轨迹,是其内在基因与外部行为的综合映射。艾多美自创立以来,始终坚持产品为核心、消费者为导向...
每周股票复盘:郑州银行(002... 截至2025年12月31日收盘,郑州银行(002936)报收于1.93元,较上周的1.95元下跌1....
原创 多... 多田保中将是侵华日军的高级指挥官,他曾担任多个重要职务,参与了许多中国战场上的战斗。曾在常德会战中发...
500ML飞天上线i茅台,消费... 2026年1月1日起,到“i茅台”购买500ml飞天茅台,成为酒圈最关心的话题。在线上热卖的同时,有...
探秘千济方桑黄对子宫癌免疫调节... 探秘千济方桑黄对子宫癌免疫调节的意义 一、桑黄简介 桑黄是一种珍贵的药用真菌,在传统医学中有着悠久的...
长鑫IPO获受理,比走势更该看... 12月31日,长鑫科技科创板IPO申请正式拿到上交所受理通知,要募295亿把钱砸进DRAM存储器的技...
价稳货足,普陀商超全力保障假日... 为保障元旦假期商品稳定供应,普陀各大商超积极备货,保障生活必需品和节令食品种类丰富、供应充足,让市民...
数字人民币正式迈入“计息时代”... 2026年1月1日起,工商银行、中国银行、农业银行、建设银行、交通银行及邮储银行六家国有大行集体实施...