Резюме : в этой статье мы покажем вам, как сравнивать последовательные строки в одной и той же таблице, используя технику самостоятельного соединения.
Предположим, у вас есть таблица 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:
Ниже приведены примеры данных таблицы 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, чтобы поддерживать последовательности строк, чтобы применить эту технику.
Из этой статьи вы узнали, как сравнивать последовательные строки в одной и той же таблице, используя технику самостоятельного соединения.
Добрый день. Спасибо за удобную и лаконичную инфу. Подскажите , при получении доступа к интерфейсу панели управления через su – postgres , система запрашивает пароль. Это , я так понимаю пароль по default ? Подскажите какой он или где найти. Спасибо
sudo passwd postgres