这是我的表数据
id | name | Status
-----------------
1 ABC Sys START
2 ABC START
3 ABC STOP
4 ABC Sys START
5 ABC START
6 ABC STOP
7 ABC Sys STOP
8 ABC Sys START
9 XYZ START
10 XYZ STOP
11 ABC Sys STOP
12 ABC Sys START
13 ABC START
14 ABC STOP
15 ABC Sys STOP
16 ABC Sys START
17 ABC START
18 ABC STOP
19 ABC Sys STOP
20 ABC Sys START
21 ABC START
22 ABC STOP
23 ABC Sys STOP
24 ABC Sys START
期望输出
13 ABC START
14 ABC STOP
17 ABC START
18 ABC STOP
21 ABC START
22 ABC STOP
我只想用START和STOP获取所有值,并使用最后更改的名称。
就像我有值为XYZ且id = 9且状态=" START"价值ABC id = 11且状态=" START"。
后价值发生变化因此,上次更改名称所需的值为状态" START"和"停止"。
单一查询是否可行?或者我需要使用多个查询?
答案 0 :(得分:0)
可能有一个更简单的解决方案,但这是一个想法...
SELECT x.*
FROM my_table x
JOIN
( SELECT name
, MAX(id) prev
FROM my_table
WHERE status IN ('START','STOP')
GROUP
BY name
) y
ON y.name <> x.name
AND y.prev < x.id
WHERE x.status IN ('START','STOP');