The script for querying BerlinMOD data loaded in MobilityDB with the BerlinMOD/R queries is available here.
What are the models of the vehicles with licence plate numbers from Licences?
SELECT DISTINCT L.Licence, C.Model AS Model FROM Vehicles C, Licences L WHERE C.Licence = L.Licence;
How many vehicles exist that are passenger cars?
SELECT COUNT (Licence) FROM Vehicles C WHERE Type = 'passenger';
Where have the vehicles with licences from Licences1 been at each of the instants from Instants1?
SELECT DISTINCT L.Licence, I.InstantId, I.Instant AS Instant, valueAtTimestamp(T.Trip, I.Instant) AS Pos FROM Trips T, Licences1 L, Instants1 I WHERE T.VehId = L.VehId AND valueAtTimestamp(T.Trip, I.Instant) IS NOT NULL ORDER BY L.Licence, I.InstantId;
Which vehicles have passed the points from Points?
SELECT DISTINCT P.PointId, P.Geom, C.Licence FROM Trips T, Vehicles C, Points P WHERE T.VehId = C.VehId AND T.Trip && P.Geom AND ST_Intersects(trajectory(T.Trip), P.Geom) ORDER BY P.PointId, C.Licence;
What is the minimum distance between places, where a vehicle with a licence from Licences1 and a vehicle with a licence from Licences2 have been?
SELECT L1.Licence AS Licence1, L2.Licence AS Licence2, MIN(ST_Distance(trajectory(T1.Trip), trajectory(T2.Trip))) AS MinDist FROM Trips T1, Licences1 L1, Trips T2, Licences2 L2 WHERE T1.VehId = L1.VehId AND T2.VehId = L2.VehId AND T1.VehId < T2.VehId GROUP BY L1.Licence, L2.Licence ORDER BY L1.Licence, L2.Licence;
What are the pairs of trucks that have ever been as close as 10m or less to each other?
SELECT DISTINCT C1.Licence AS Licence1, C2.Licence AS Licence2 FROM Trips T1, Vehicles C1, Trips T2, Vehicles C2 WHERE T1.VehId = C1.VehId AND T2.VehId = C2.VehId AND T1.VehId < T2.VehId AND C1.Type = 'truck' AND C2.Type = 'truck' AND T1.Trip && expandSpatial(T2.Trip, 10) AND tdwithin(T1.Trip, T2.Trip, 10.0) ?= true ORDER BY C1.Licence, C2.Licence;
What are the licence plate numbers of the passenger cars that have reached the points from Points first of all passenger cars during the complete observation period?
WITH Timestamps AS (
SELECT DISTINCT C.Licence, P.PointId, P.Geom,
MIN(startTimestamp(atValue(T.Trip,P.Geom))) AS Instant
FROM Trips T, Vehicles C, Points1 P
WHERE T.VehId = C.VehId AND C.Type = 'passenger' AND
T.Trip && P.Geom AND ST_Intersects(trajectory(T.Trip), P.Geom)
GROUP BY C.Licence, P.PointId, P.Geom )
SELECT T1.Licence, T1.PointId, T1.Geom, T1.Instant
FROM Timestamps T1
WHERE T1.Instant <= ALL (
SELECT T2.Instant
FROM Timestamps T2
WHERE T1.PointId = T2.PointId )
ORDER BY T1.PointId, T1.Licence;
What are the overall travelled distances of the vehicles with licence plate numbers from Licences1 during the periods from Periods1?
SELECT L.Licence, P.PeriodId, P.Period, SUM(length(atPeriod(T.Trip, P.Period))) AS Dist FROM Trips T, Licences1 L, Periods1 P WHERE T.VehId = L.VehId AND T.Trip && P.Period GROUP BY L.Licence, P.PeriodId, P.Period ORDER BY L.Licence, P.PeriodId;
What is the longest distance that was travelled by a vehicle during each of the periods from Periods?
WITH Distances AS ( SELECT P.PeriodId, P.Period, T.VehId, SUM(length(atPeriod(T.Trip, P.Period))) AS Dist FROM Trips T, Periods P WHERE T.Trip && P.Period GROUP BY P.PeriodId, P.Period, T.VehId ) SELECT PeriodId, Period, MAX(Dist) AS MaxDist FROM Distances GROUP BY PeriodId, Period ORDER BY PeriodId;
When and where did the vehicles with licence plate numbers from Licences1 meet other vehicles (distance < 3m) and what are the latter licences?
WITH Values AS (
SELECT DISTINCT L1.Licence AS QueryLicence, C2.Licence AS OtherLicence,
atPeriodSet(T1.Trip, getTime(atValue(tdwithin(T1.Trip, T2.Trip, 3.0), TRUE))) AS Pos
FROM Trips T1, Licences1 L1, Trips T2, Licences2 C2
WHERE T1.VehId = L1.VehId AND T2.VehId = C2.VehId AND T1.VehId < T2.VehId AND
expandSpatial(T1.Trip, 3) && expandSpatial(T2.Trip, 3)
dwithin(T1.Trip, T2.Trip, 3.0) )
SELECT QueryLicence, OtherLicence, array_agg(Pos ORDER BY startTimestamp(Pos)) AS Pos
FROM Values
GROUP BY QueryLicence, OtherLicence
ORDER BY QueryLicence, OtherLicence;
Which vehicles passed a point from Points1 at one of the instants from Instants1?
SELECT P.PointId, P.Geom, I.InstantId, I.Instant, C.Licence FROM Trips T, Vehicles C, Points1 P, Instants1 I WHERE T.VehId = C.VehId AND T.Trip @> STBOX(P.Geom, I.Instant) AND valueAtTimestamp(T.Trip, I.Instant) = P.Geom ORDER BY P.PointId, I.InstantId, C.Licence;
Which vehicles met at a point from Points1 at an instant from Instants1?
SELECT DISTINCT P.PointId, P.Geom, I.InstantId, I.Instant, C1.Licence AS Licence1, C2.Licence AS Licence2 FROM Trips T1, Vehicles C1, Trips T2, Vehicles C2, Points1 P, Instants1 I WHERE T1.VehId = C1.VehId AND T2.VehId = C2.VehId AND T1.VehId < T2.VehId AND T1.Trip @> STBOX(P.Geom, I.Instant) AND T2.Trip @> STBOX(P.Geom, I.Instant) AND valueAtTimestamp(T1.Trip, I.Instant) = P.Geom AND valueAtTimestamp(T2.Trip, I.Instant) = P.Geom ORDER BY P.PointId, I.InstantId, C1.Licence, C2.Licence;
Which vehicles travelled within one of the regions from Regions1 during the periods from Periods1?
SELECT DISTINCT R.RegionId, P.PeriodId, P.Period, C.Licence FROM Trips T, Vehicles C, Regions1 R, Periods1 P WHERE T.VehId = C.VehId AND T.trip && STBOX(R.Geom, P.Period) AND ST_Intersects(trajectory(atPeriod(T.Trip, P.Period)), R.Geom) ORDER BY R.RegionId, P.PeriodId, C.Licence;
Which vehicles travelled within one of the regions from Regions1 at one of the instants from Instants1?
SELECT DISTINCT R.RegionId, I.InstantId, I.Instant, C.Licence FROM Trips T, Vehicles C, Regions1 R, Instants1 I WHERE T.VehId = C.VehId AND T.Trip && STBOX(R.Geom, I.Instant) AND ST_Contains(R.Geom, valueAtTimestamp(T.Trip, I.Instant)) ORDER BY R.RegionId, I.InstantId, C.Licence;
Which vehicles passed a point from Points1 during a period from Periods1?
SELECT DISTINCT PO.PointId, PO.Geom, PR.PeriodId, PR.Period, C.Licence FROM Trips T, Vehicles C, Points1 PO, Periods1 PR WHERE T.VehId = C.VehId AND T.Trip && STBOX(PO.Geom, PR.Period) AND ST_Intersects(trajectory(atPeriod(T.Trip, PR.Period)),PO.Geom) ORDER BY PO.PointId, PR.PeriodId, C.Licence;
List the pairs of licences for vehicles, the first from Licences1, the second from Licences2, where the corresponding vehicles are both present within a region from Regions1 during a period from QueryPeriod1, but do not meet each other there and then.
SELECT P.PeriodId, P.Period, R.RegionId, L1.Licence AS Licence1, L2.Licence AS Licence2 FROM Trips T1, Licences1 L1, Trips T2, Licences2 L2, Periods1 P, Regions1 R WHERE T1.VehId = L1.VehId AND T2.VehId = L2.VehId AND L1.Licence < L2.Licence AND T1.Trip && STBOX(R.Geom, P.Period) AND T2.Trip && STBOX(R.Geom, P.Period) AND ST_Intersects(trajectory(atPeriod(T1.Trip, P.Period)), R.Geom) AND ST_Intersects(trajectory(atPeriod(T2.Trip, P.Period)), R.Geom) AND tintersects(atPeriod(T1.Trip, P.Period), atPeriod(T2.Trip, P.Period)) %= FALSE ORDER BY PeriodId, RegionId, Licence1, Licence2;
Which point(s) from Points have been visited by a maximum number of different vehicles?
WITH PointCount AS ( SELECT P.PointId, COUNT(DISTINCT T.VehId) AS Hits FROM Trips T, Points P WHERE ST_Intersects(trajectory(T.Trip), P.Geom) GROUP BY P.PointId ) SELECT PointId, Hits FROM PointCount AS P WHERE P.Hits = ( SELECT MAX(Hits) FROM PointCount );