Сказано — сделано. Потом подумано (Авессалом Подводный).

Как сравнить последовательные строки в одной таблице в MySQL

1 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
27 декабря 2019
Как скопировать базу данных MySQL
Резюме : в этой статье мы покажем вам, как сравнивать последовательные строки в одной и той же таблице, используя технику самостоятельного соединения.

Предположим, у вас есть таблица 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
);

 

В таблице inventory:

  • id – является автоинкрементными колонками.
  • counted_date  – это подсчитанная  дата.
  • item_no  – код товара, размещенный в инвентаре.
  • qty –  накопленное количество в запасе.

Ниже приведены примеры данных таблицы inventory:

INSERT INTO inventory(counted_date,item_no,qty)
VALUES ('2019-12-27','A',20),
('2019-12-27','A',30),
('2019-12-27','A',45),
('2019-12-27','A',80),
('2019-12-27','A',100);

 

Если вы хотите узнать, сколько предметов получено в день для каждого предмета, вам нужно сравнить количество наличных в конкретном дне с его предыдущим днем.

Другими словами, в таблице inventory необходимо сравнить строку с последовательной строкой, чтобы найти разницу.

В MySQL вы можете использовать технику самосоединения (self join) для сравнения последовательных строк как следующий запрос:

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 позволяет, конечно, сравнить текущую строку со следующей строкой в таблице inventory, предполагая, что в столбцах идентификаторов нет пробелов.

Если вы не можете избежать пробела, вы можете создать дополнительный столбец, например,  seq, чтобы поддерживать последовательности строк, чтобы применить эту технику.

Из этой статьи вы узнали, как сравнивать последовательные строки в одной и той же таблице, используя технику самостоятельного соединения.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читать  Учебник. MySQL и Perl
Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close