我有这样的禁忌:
sn(char) ts(int) data(char) flag(tinyint)
'a' 1494825611 'a0' 1
'a' 1494825613 'a1' 0
'a' 1494825617 'a2' 0
'a' 1494825623 'a3' 1
'a' 1494825634 'a4' 1
'b' 1494825644 'b1' 1
'b' 1494825643 'b0' 0
'a' 1494825645 'a5' 1
'a' 1494825648 'a6' 0
'b' 1494825658 'b2' 1
行的顺序可能不正确(例如b1
和b0
),因此应首先对它们进行排序ts
。
我正在尝试进行有效的查询,sn
以获取当前和下一个flag
不同的行。
结果,我想要给sn
'a'这样的东西:
old_ts ts old_data data flag
1494825611 1494825613 'a0' 'a1' 0
1494825617 1494825623 'a2' 'a3' 1
1494825645 1494825648 'a5' 'a6' 0
对于sn
'b':
old_ts ts old_data data flag
1494825643 1494825644 'b0', 'b1' 1
创建其他列或表不是问题。
您可以使用@rowFlag
变量。每行检查是否等于flag。如果是,则将过滤器字段设置为0以稍后跳过
select old_ts, ts, old_data, data, new_flag as flag
from
(select
t.ts,
t.data,
case when @rowFlag=flag then 0 else 1 end as filter,
flag as new_flag,
@rowFlag:=flag as old_flag,
@old as old_data,
@old:=data,
@old_ts as old_ts,
@old_ts:=ts
from test t, (select @rowFlag:=-1, @old:=null, @old_ts:=null) as def
where sn='a'
order by ts) as sub
where filter=1 and old_ts is not null;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句