Wenn eine Reise von Marker beginnt immer 1 und throug Marker Schritt, aber es kann stoppt, bevor die endgültige Markierung erreicht, können Sie diese verwenden:
select routeid, count(marker) trip_n
from RouteTable
where marker=5
group by routeid
Wenn Marker „berührt“ von eine Reise ganz zufällig sind, aber Sie müssen zählen, wie viele komplette Sie haben, verwenden Sie diese:
;with
g as (select distinct routeid from RouteTable),
n as (select 1 n union all select 2 union all select 3 union all select 4 union all select 5),
c as (
select routeid, marker, count(marker) cnt
from RouteTable
group by routeid, marker
),
s as (
select g.*, n marker, isnull(cnt,0) cnt
from g
cross join n
left join c on c.marker = n.n
)
select routeid, /*count(distinct marker) n_mark, */min(cnt) n_trip
from s
group by routeid
Ich würde überprüfen 'GROUP BY' und COUNT()'. – jarlh
Können Sie garantieren, dass id immer in Ordnung ist? Wenn nicht, wie gruppieren Sie die Zeilen in einzelne Reisen? Beginnen die Trips auch immer mit Marker 1 und fahren mit Marker 5 fort? – iamdave
@shanmugam Die Logik davon ist an die Reihenfolge gebunden, in der Marker hinzugefügt werden? Was passiert, wenn jemand 1 und 2 addiert (aber nicht 3, 4, 5) und dann jemand 3, 4 und 5 hinzufügt (sie haben 1, 2 nicht abgeschlossen)? Wie können Sie feststellen, ob das ein vollständiger Durchlauf oder zwei Teilläufe sind? – cloudsafe