mysql相同条件连续多少条_MySQL比较相同表中的连续行

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

假设您有一个名为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来维护行的顺序,以便应用此技术。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值