У меня есть база данных mysql, содержащая таблицу со следующими столбцами: (Day_T1, Day_T2, Day_T3, Day_T4) и уникальный идентификатор для каждой строки. они все целые числа. Я хотел бы сравнить каждую строку с предыдущими строками по порядку. И критерии сравнения, которые мне нужны, - это подсчитать значения, равные +1 предыдущей строки.
Так что, если мы сравниваем 16 и 15, так как он вырос на +1, он должен быть посчитан как 1. и мне нужно общее количество подсчетов для каждого сравнения строк.
Строки могут иметь повторяющиеся значения. Например, если вы возьмете первые две строки в приведенной ниже таблице (19,18,15,16) и (20,17,15,15), вторая строка имеет две 15-ки. Так что каждый должен быть взят один раз для подсчета. Здесь счет должен быть 2.
Пример таблицы будет выглядеть так:
ID Day_T1 Day_T2 Day_T3 Day_T4
70 19 18 15 16
69 20 17 15 15
68 24 25 16 17
67 19 18 14 12
66 19 17 14 13
65 17 16 15 14
И ожидаемые результаты будут примерно такими:
ID 69 68 67 66 65 64 etc
70 2 0 1 2 3 etc
69 1 2 2 2 etc
68 0 0 2 etc
У меня есть только базовые знания о запросах mysql. Я не совсем уверен, что MySQL является правильным способом сделать это. Если это не так, и я был бы рад, если бы вы могли направить меня в правильном направлении.
Заранее спасибо.
РЕШЕНИЕ в соотв. на ответ Cobra_Fast:
SELECT
d1.id,
d2.id,
IF((d1.day1-d2.day1)=1,1,0) +
IF((d1.day1-d2.day2)=1,1,0) +
IF((d1.day1-d2.day3)=1,1,0) +
IF((d1.day1-d2.day4)=1,1,0) +
IF((d1.day2-d2.day2)=1,1,0) +
IF((d1.day2-d2.day1)=1,1,0) +
IF((d1.day2-d2.day3)=1,1,0) +
IF((d1.day2-d2.day4)=1,1,0) +
IF((d1.day3-d2.day3)=1,1,0) +
IF((d1.day3-d2.day1)=1,1,0) +
IF((d1.day3-d2.day2)=1,1,0) +
IF((d1.day3-d2.day4)=1,1,0) +
IF((d1.day4-d2.day4)=1,1,0) +
IF((d1.day4-d2.day1)=1,1,0) +
IF((d1.day4-d2.day2)=1,1,0) +
IF((d1.day4-d2.day3)=1,1,0) AS onecount
FROM days AS d1 , days AS d2
WHERE d1.id IS NOT NULL AND d2.id IS NOT NULL AND d1.id<>d2.id;
где структура таблицы выглядит так:
CREATE TABLE days (
id INT AUTO_INCREMENT,
day1 INT,
day2 INT,
day3 INT,
day4 INT,
PRIMARY KEY (id)
);
INSERT INTO days VALUES
(70, 19, 18, 15, 16),
(69, 20, 17, 15, 15),
(68, 24, 25, 16, 17),
(67, 19, 18, 14, 12),
(66, 19, 17, 14, 13),
(65, 17, 16, 15, 14);