Поиск по сайту:
Настоящий программист всегда выберет путь через 10 граблей, максимально обходя их, 20 рисков, максимально задумываясь о методе реализации(а не о том, что будет если риск не оправдается), нежели согласится выбрать путь саморазрушения и остановке развития через принятие идеи программерски не уважающего себя человека. (GreeveX)

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
27.12.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, чтобы поддерживать последовательности строк, чтобы применить эту технику.

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

Читать  Синтаксический анализ оболочки MySQL

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

Если статья понравилась, то поделитесь ей в социальных сетях:

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

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Рекомендуемое
Блоггер с сайтом, генерирующим низкий трафик, может работать над тем,…

Спасибо!

Теперь редакторы в курсе.