如何在MySQL中比较同一表中的连续行
时间:2019-11-20 08:52:30 来源:igfitidea点击:
简介:在本教程中,我们将向您展示如何使用自联接技术比较同一表中的连续行。
假设您有一个名为清单的表,其表由CREATE TABLE语句定义,如下所示:
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 );
在库存表中:
id是一个自动增量列。
counted_date是计算日期。
item_no是过帐到库存的物料代码。
数量是库存中的累计现有数量。
以下是库存表的示例数据:
INSERT INTO inventory(counted_date,item_no,qty) VALUES ('2014-10-01','A',20), ('2014-10-01','A',30), ('2014-10-01','A',45), ('2014-10-01','A',80), ('2014-10-01','A',100);
如果您想知道每个物品每天收到多少物品,则需要将特定日期的现有数量与前一天的数量进行比较。
换句话说,在库存表中,您需要将一行与其连续的行进行比较以找到差异。
在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';
INNER JOIN子句g2.id = g1.id +1中的条件允许您将当前行与库存表中的下一行进行比较,当然前提是id列中没有空格。
万一您无法避免出现间隙,可以创建一个额外的列,例如seq来维护行的顺序,以便您应用此技术。
在本教程中,您学习了如何使用自联接技术比较同一表中的连续行。