求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
 


AI 智能化软件测试方法与实践
5月23-24日 上海+在线



人工智能.机器学习TensorFlow
5月22-23日 北京



图数据库与知识图谱
5月22-23日 北京
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL比较相同表中的连续行
602 次浏览
16次  

在本教程中,我们将介绍如何使用自连接技术来比较同一个表中的连续行。

假设您有一个名为inventory的表,其中包含由CREATE TABLE语句定义的结构,如下所示:

USE testdb;
CREATE TABLE inventory(
id INT AUTO_INCREMENT PRIMARY KEY,
counted_date date NOT NULL,
item_no VARCHAR(20) NOT NULL,
qty int(11) NOT NULL
);

在库存(inventory)表中:

id是自动增量列。

count_date是计数日期。

item_no是发布到广告资源的商品代码。

qty是库存中累计的现货数量。

以下是inventory表的示例数据:

INSERT INTO inventory(counted_date,item_no,qty)
VALUES ('2017-10-01','A',20),
('2017-10-01','A',30),
('2017-10-01','A',45),
('2017-10-01','A',80),
('2017-10-01','A',100);

如果想知道每个物品每天收到的物品数量,需要将特定日期的现有数量与前一天进行比较。

换句话说,在inventory表中,需要将一行与其连续行进行比较以找出差异。

在MySQL中,可以使用自连接技术来比较连续的行,如以下查询:

SELECT
g1.item_no,
g1.counted_date from_date,
g2.counted_date to_date,
(g2.qty - g1.qty) AS receipt_qty
FROM
inventory g1
INNER JOIN
inventory g2 ON g2.id = g1.id + 1
WHERE
g1.item_no = 'A';

执行上面查询语句,得到以下结果 -

+---------+------------+------------+-------------+
| item_no | from_date | to_date | receipt_qty |
+---------+------------+------------+-------------+
| A | 2017-10-01 | 2017-10-01 | 10 |
| A | 2017-10-01 | 2017-10-01 | 15 |
| A | 2017-10-01 | 2017-10-01 | 35 |
| A | 2017-10-01 | 2017-10-01 | 20 |
+---------+------------+------------+-------------+
4 rows in set

INNER JOIN子句g2.id = g1.id + 1中的条件允许您将当前行与inventory表中的下一行进行比较,当然,假设id列中没有间隙。

如果无法避免差距,您可以创建一个附加列,例如seq来维护行的顺序,以便应用此技术。

在本教程中,您已经学会了如何使用自连接技术来比较同一个表中的连续行。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



602 次浏览
16次
 捐助