摘要:在本教程中,我们将向您展示如何使用自连接技术比较同一表中的连续行。
假设您有一个名为inventory
的表,其结构由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
);
Code language: SQL (Structured Query Language) (sql)
inventory
表中:
库存表的样本数据如下:
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);
Code language: SQL (Structured Query Language) (sql)
如果您想了解每种商品每天收到的商品数量,您需要将特定日期与前一天的现有数量进行比较。
换句话说,在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';
Code language: SQL (Structured Query Language) (sql)
INNER JOIN子句 g2.id = g1.id + 1 中的条件允许您将 inventory 表中的当前行与下一行进行比较,当然,前提是 id 列中没有间隙。
如果您无法避免间隙,您可以创建一个附加列(例如seq
来维护行的顺序,以便您应用此技术。
在本教程中,您学习了如何使用自连接技术比较同一表中的连续行。
本教程有帮助吗?