これは MySQL の苦痛です。しかし、それは可能です。ロジックは、シーケンスの開始位置を見つけることです。これは、相関サブクエリといくつかの演算を使用して行うことができます。次に、開始の累積合計が必要です。これは、相関サブクエリで相関サブクエリを実行する必要があるため、より困難です。
まず、NullIfStart
変数を設定するには:
select t.*,
(select 0
from t t2
where left(t2.field, 8) = left(t.field, 8) and
t2.field < t.field and
right(t2.field, 7) + 0 = right(t.field, 7) + 0 - 1
) as NullIfStart
from t;
これは、グループ化フィールドとして使用できる累積合計を取得します。
select t.*
(select sum(NullIfStart is null)
from (select t1.*,
(select 0
from t t2
where left(t2.field, 8) = left(t1.field, 8) and
t2.field < t1.field and
right(t2.field, 7) + 0 = right(t1.field, 7) + 0 - 1
) as NullIfStart
from t t1
) tnis
where right(tnis.field, 7) = right(t.field, 7) and
tnis.field <= t.field
) grp
from t;
最終的な解決策は、集計を行うことです。
select min(field),
(case when max(field <> min(field) then max(field) end)
from (select t.*
(select sum(NullIfStart is null)
from (select t1.*,
(select 0
from t t2
where left(t2.field, 8) = left(t1.field, 8) and
t2.field < t1.field and
right(t2.field, 7) + 0 = right(t1.field, 7) + 0 - 1
) as NullIfStart
from t t1
) tnis
where left(tnis.field, 8) = left(t.field, 8) and
tnis.field <= t.field
) grp
from t
) s
group by left(s.field, 8), grp;