Php 基于上次未更改的列数据从mysql获取行

Php 基于上次未更改的列数据从mysql获取行,php,mysql,Php,Mysql,我需要一个SQL查询,根据未更改的列值仅获取最后一行。我该怎么做 表:表1 ID LEVEL 1 1 2 1 3 2 4 4 5 3 6 3 7 4 8 5 9 3 10 3 我需要一个SQL查询,可以给我最后一行包含3级,直到它是不变的 e、 g 给予 10 3 9 3 6 3 5 3 我只是想 9 3 10 3 例如: 好的,查询已经返回了您所请求的内容,您必须通过传递更多字段或向混合中抛出更多条件来进一步缩小它的范围。你不能

我需要一个SQL查询,根据未更改的列值仅获取最后一行。我该怎么做

表:表1

ID  LEVEL
1   1
2   1
3   2
4   4
5   3
6   3
7   4
8   5
9   3
10  3
我需要一个SQL查询,可以给我最后一行包含3级,直到它是不变的

e、 g

给予

10  3
9   3
6   3
5   3
我只是想

9   3
10  3
例如:


好的,查询已经返回了您所请求的内容,您必须通过传递更多字段或向混合中抛出更多条件来进一步缩小它的范围。你不能说‘我只想要这些数据’,除非你缩小范围。还有其他列吗?在最后两行中,级别为3,在最后三行中,级别为5,我需要最后一行中的所有行,其中级别为3,第三行之上的任何行,其中级别为5,我不需要。我不想要三级的所有行。如果8也是三级呢?那么我也想要ID 8。所以你不想低于ID 8?
9   3
10  3
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(ID SERIAL PRIMARY KEY
,LEVEL INT NOT NULL
);

INSERT INTO my_table VALUES
( 1,1),
( 2,1),
( 3,2),
( 4,4),
( 5,3),
( 6,3),
( 7,4),
( 8,5),
( 9,3),
(10,3);

SELECT MIN(id) range_start
     , MAX(id) range_end
     , level 
  FROM 
     ( SELECT x.*
            , CASE WHEN @prev=level THEN @i:=@i ELSE @i:=@i+1 END i
            , @prev:= level 
         FROM my_table x
            ,( SELECT @prev:=null,@i:=0 ) vars 
        ORDER 
            BY id
     ) a 
 WHERE level = 3 -- optional
 GROUP 
    BY level
     , i
 ORDER
    BY range_start DESC 
 LIMIT 1;

  +-------------+-----------+-------+
  | range_start | range_end | level |
  +-------------+-----------+-------+
  |           9 |        10 |     3 |
  +-------------+-----------+-------+