MySQL-如何根据前一行中的值查找行
我有一张餐桌:MySQL-如何根据前一行中的值查找行,mysql,nested-query,Mysql,Nested Query,我有一张餐桌: create table settings( id int , date datetime , user varchar(20) , status varchar(10) ); insert into settings values (1 , '2020-07-10 14:36:06', 'user1', 'INACTIVE'), (1 , '2020-07-10 14:39:54', 'user1', 'ACTIVE'), (1 , '2020-
create table settings(
id int
, date datetime
, user varchar(20)
, status varchar(10)
);
insert into settings values
(1 , '2020-07-10 14:36:06', 'user1', 'INACTIVE'),
(1 , '2020-07-10 14:39:54', 'user1', 'ACTIVE'),
(1 , '2020-07-10 14:44:06', 'user1', 'INACTIVE'),
(1 , '2020-07-10 14:46:06', 'user2', 'INACTIVE'),
(1 , '2020-07-10 14:49:06', 'user2', 'SCHEDULED'),
(1 , '2020-07-10 14:55:06', 'user2', 'ACTIVE'),
(2 , '2020-07-12 14:36:06', 'user1', 'INACTIVE'),
(2 , '2020-07-13 14:39:54', 'user1', 'INACTIVE'),
(2 , '2020-07-13 16:44:06', 'user1', 'ACTIVE'),
(2 , '2020-07-15 14:46:06', 'user3', 'INACTIVE'),
(2 , '2020-07-15 15:49:06', 'user3', 'INACTIVE'),
(2 , '2020-07-17 14:46:06', 'user3', 'ACTIVE')
;
插入代码的示例代码位于中
该过程从INACTIVE
状态开始,由系统安排,然后用户可以更改为scheduled
或ACTIVE
我需要查找状态为活动
的行,但只查找之前状态为非活动
的行,按用户分组。特定情况下(不确定是否可能)查找状态为ACTIVE
但前几行具有SCHEDULED->INACTIVE
序列的行
我在下面的屏幕截图上选择了应返回的行:
我正在尝试使用它,但结果应该返回当前行下的前一行
select * from (
select @rownum:=@rownum+1 row, a.*
from settings a
where a.status = 'ACTIVE'
) as cr
LEFT JOIN (SELECT @rownum2:=@rownum2+1 row, b.* FROM settings b
where b.status = 'INACTIVE' ) as pr
on cr.id = pr.id and cr.date > pr.date
您可以使用自连接来完成此操作。 执行自联接后,从一个表(例如A)获取每个日期的活动时间,从另一个表(例如B)获取非活动时间,其中
B.date
查询:
SELECT A.user,max(B.date) as Inactive,min(A.date) as Active
FROM settings A JOIN settings B
ON A.id=B.id and A.user=B.user
WHERE A.status = 'ACTIVE'
AND B.status = 'INACTIVE'
AND B.date<A.date
GROUP BY A.date,A.user
选择A.user,max(B.date)为非活动,min(A.date)为活动
从设置A加入设置B
在A.id=B.id和A.user=B.user上
其中A.status='ACTIVE'
和B.status='INACTIVE'
和B.date这将帮助您从设置中选择*,其中status='ACTIVE'
您可以通过此按钮找到。如果你认为主动是消极的,没有什么独特的,所以它只意味着活跃!BloodyLogic Sqlserver与mysql不同,使用其中一种方式编写的代码不一定会传输到另一种方式。您的主键是什么?@草莓能否提供一个边缘大小写,以便我可以详细查看它?对不起,我的意思是id。@草莓请发布一个sqlfiddle,并且缺少结果中预期的值。这是第一列在上面的OP图片中,仅此而已。我们可以假设结果应该包含以下列(id、date、user、status)&该列是我假设的某个外键,输出中不需要它。若OP想要那个列,那个么只需将它添加到“选择列表”和“分组依据”中。我觉得输出中没有必要这样做。