像这样的东西怎么样(这是T-SQL,即SQL Server,但也可能适用于MySql)
declare @t table (eventTime datetime, eventState bit)
insert @t select '2012-01-01 00:00:00', 1
union all select '2012-01-01 00:01:00', 1
union all select '2012-01-01 00:02:00', 0
union all select '2012-01-01 00:03:00', 1
union all select '2012-01-01 00:04:00', 1
union all select '2012-01-01 00:05:00', 0
select *
from
(
select eventTime, eventState, row_number() over (order by eventTime, eventState)r
from @t
) a
inner join
(
select eventTime, eventState, row_number() over (order by eventTime, eventState)r
from @t
) b
on a.r = b.r-1
where a.eventState <> b.eventState
——或者:
select *
from @t a
where exists (
select 1
from @t b
where a.eventTime > b.eventTime
and a.eventState != b.eventState
and not exists
(
select 1
from @t c
where a.eventTime > c.eventTime
and b.eventTime < c.eventTime
)
)
order by eventTime
- 或者
select *
from @t a
inner join @t b
on a.eventTime > b.eventTime
and a.eventState != b.eventState
left outer join @t c
on a.eventTime > c.eventTime
and b.eventTime < c.eventTime
where c.eventState is null
order by a.eventTime