用MySQL查询比较行

时间:2019-01-16 13:09:00

标签: mysql mysqli

我有一个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。

样本表如下所示:

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);

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

SELECT
    d1.id,
    d2.id,
    IF(ABS(d1.day1-d2.day1)=1,1,0) +
    IF(ABS(d1.day2-d2.day2)=1,1,0) +
    IF(ABS(d1.day3-d2.day3)=1,1,0) +
    IF(ABS(d1.day4-d2.day4)=1,1,0) AS onecount
FROM days AS d1
LEFT JOIN days AS d2 ON (d1.id = (d2.id + 1))
WHERE d1.id IS NOT NULL AND d2.id IS NOT NULL;

结果如下:

id  id  onecount
66  65  3
67  66  2
68  67  0
...

提琴:https://www.db-fiddle.com/f/7VAG1GTgj6CXiLKkPAHJtf/1