如何在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来维护行的顺序,以便您应用此技术。

在本教程中,您学习了如何使用自联接技术比较同一表中的连续行。