我有一个MySQL数据库,其中包含一个表格,包含以下列:(Day_T1,Day_T2,Day_T3,Day_T4)和每行的唯一ID。它们都是整数。我想按顺序将每行与前面的行进行比较。我需要的比较标准是计算与前一行相比值为+1的值的数量。
因此,如果我们比较16和15,由于它上升了+1,应将其计为1。我需要每行比较的总计数。
行可能具有重复值。例如,如果您在下表中取前两行(19,18,15,16)和(20,17,15,15),则第二行有两个15。因此,每个应该被计算一次。这里的计数应为2。
样例表格如下:
预期结果将类似于这样:
因此,如果我们比较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);