with tablenewkey as(
select ROW_NUMBER() over(order by f1.sn) newkey, f1.* from theater f1
),
nbplacevacant as (
select 3 as NbrowByGroup
),
calculdiff as (
select f1.*, isnull(f3.newkey, 0) newkeylastN, f1.newkey - isnull(f3.newkey, 0) DiffYWithLasN
from tablenewkey f1
outer apply
(
select top 1 * from tablenewkey f2
where f2.newkey<f1.newkey and f2.SEATVACANT='N'
order by f2.newkey desc
) f3
where f1.SEATVACANT='Y' and (f1.newkey - isnull(f3.newkey, 0))>=(select NbrowByGroup from nbplacevacant)
),
possibilite as (
select f0.*, f1.newkey Groupement, f1.DiffYWithLasN
from tablenewkey f0 inner join calculdiff f1
on f0.newkey between (f1.newkey - DiffYWithLasN +1) and f1.newkey
where f0.SEATVACANT='Y'
)
select newkey, sn, Groupement, DENSE_RANK() over(order by Groupement) PossiblilityRang from possibilite
order by groupement, sn
* Lücken-und-Inseln * - Z. B. [Finde "n" aufeinanderfolgende freie Nummern aus der Tabelle] (http://dba.stackexchange.com/questions/36943/find-n-consecutive-free-numbers-from-table) –
Wenn das wirklich ein Theater darstellt, dann ich bezweifle, dass es eine einzige Reihe von 100 Sitzen gibt. Wahrscheinlich müssen Sie also auch berücksichtigen, welche Plätze numerisch aneinandergrenzen, aber nicht physisch nebeneinander. – sstan