Php 基于上次未更改的列数据从mysql获取行
我需要一个SQL查询,根据未更改的列值仅获取最后一行。我该怎么做 表:表1Php 基于上次未更改的列数据从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 例如: 好的,查询已经返回了您所请求的内容,您必须通过传递更多字段或向混合中抛出更多条件来进一步缩小它的范围。你不能
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 |
+-------------+-----------+-------+