概述
在本教程中,我们将介绍如何使用自连接技术来比较同一个表中的连续行。
假设您有一个名为inventory的表,其中包含由语句定义的结构,如下所示:
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
子句g2.id = g1.id + 1中的条件允许您将当前行与inventory表中的下一行进行比较,当然,假设id列中没有间隙。
如果无法避免差距,您可以创建一个附加列,例如seq来维护行的顺序,以便应用此技术。
在本教程中,您已经学会了如何使用自连接技术来比较同一个表中的连续行。
¥ 我要打赏 纠错/补充 收藏
最后
以上就是欣慰小猫咪为你收集整理的mysql 循环比对_MySQL比较相同表中的连续行的全部内容,希望文章能够帮你解决mysql 循环比对_MySQL比较相同表中的连续行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复