Sql 查找最后一个连续行

Sql 查找最后一个连续行,sql,mysql,Sql,Mysql,我需要一些询问方面的帮助 我有一张简单的桌子: CREATE TABLE `consecutiv` ( `id` int(11) NOT NULL auto_increment, `readVal` int(11) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1; insert into `consecutiv`(`id`,`readVal`)

我需要一些询问方面的帮助

我有一张简单的桌子:

CREATE TABLE `consecutiv` (
  `id` int(11) NOT NULL auto_increment,
  `readVal` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;


insert  into `consecutiv`(`id`,`readVal`) values (1,2),(2,2),(3,2),(5,3),(6,3),(7,3),(8,3),(9,4),(10,5),(11,6),(12,6),(13,2),(14,2),(15,6);
看起来像这样:

id  readVal
    1   2
    2   2
    3   2
    5   3
    6   3
    7   3
    8   3
    9   4
   10   5
   11   6
   12   6
   13   2
   14   2
   15   6
我想获取给定readVal的最后一个连续行:

在上述示例中,这将是:

id:3表示readVal=2

id:8表示readVal=3

...
我尝试了以下查询:

SELECT consecutiv.id, consecutiv.readVal, c.id, c.readVal  FROM consecutiv 
JOIN consecutiv c ON consecutiv.id = c.id-1
WHERE consecutiv.readVal!=c.readVal ORDER BY consecutiv.id ASC
只要序列中没有丢失的id,它就可以工作。在上面的示例中,缺少id no 4,查询将不会返回预期结果

谢谢大家!

SELECT a.id, a.readVal 
FROM consecutiv a
WHERE a.readVal != 
   (SELECT b.readVal 
    FROM consecutiv b 
    WHERE b.id > a.id 
    ORDER BY id ASC
    LIMIT 1)
ORDER BY a.id;
返回:

 id | readval
----+---------
  3 |       2
  8 |       3
  9 |       4
 10 |       5
 12 |       6
 14 |       2
 id | readval | nextreadval
----+---------+-------------
  3 |       2 |           3
  8 |       3 |           4
  9 |       4 |           5
 10 |       5 |           6
 12 |       6 |           2
 14 |       2 |           6
 15 |       6 |
对于还需要最后一行的情况:

SELECT c.id, c.readVal, c.nextReadVal
FROM 
  (SELECT 
   a.id, a.readVal, 
     (SELECT b.readVal
      FROM consecutiv b 
      WHERE b.id > a.id 
      ORDER BY id ASC 
      LIMIT 1) AS nextReadVal
   FROM consecutiv a) AS c
WHERE readVal != nextReadVal OR nextReadVal IS NULL
ORDER BY c.id;
返回:

 id | readval
----+---------
  3 |       2
  8 |       3
  9 |       4
 10 |       5
 12 |       6
 14 |       2
 id | readval | nextreadval
----+---------+-------------
  3 |       2 |           3
  8 |       3 |           4
  9 |       4 |           5
 10 |       5 |           6
 12 |       6 |           2
 14 |       2 |           6
 15 |       6 |

你说你期望readVal=2的id:3肯定这是13/14的最后一个连续结果吗?@rudi目前这是返回readVal=2的2个结果。编辑Oh I see I think by“我想获得给定readVal的最后一个连续行:”OP表示每对中的最后一个,而不是表中最后一对中的最后一个。在这种情况下,这看起来是最好的答案!对这正是我想要的。非常感谢。您确定结果中不需要id为15(val 6)的行吗?根据您对“最后一个连续行”的定义,它也应该返回,或者?(我也将为该案例添加一个查询)非常好,谢谢!我不需要自动取款机,但在其他地方可能有用!