求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

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比较相同表中的连续行
572 次浏览
4次  

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

假设您有一个名为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元





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



572 次浏览
4次
 捐助