95 lines
4.2 KiB
SQL
95 lines
4.2 KiB
SQL
-- name: GetStationsByName :many
|
|
SELECT s.id as "id",
|
|
s.name as "name",
|
|
sl.latitude as "latitude",
|
|
sl.longitude as "longitude",
|
|
bus as "bus",
|
|
taxi as "taxi",
|
|
tram as "tram",
|
|
ferry as "ferry",
|
|
subway as "subway",
|
|
national as "national",
|
|
regional as "regional",
|
|
suburban as "suburban",
|
|
regionalexp as "regionalexp",
|
|
nationalexp as "nationalexp"
|
|
FROM stops s
|
|
JOIN public.stat_locations sl
|
|
on sl.id = s.location_id
|
|
JOIN public.stat_services ss
|
|
on ss.id = s.service_id
|
|
JOIN public.station_rank sr
|
|
on sr.stop = s.id
|
|
WHERE s.id
|
|
in (SELECT id
|
|
FROM stops s2
|
|
WHERE s2.name ILIKE ALL (@search_params::text[])
|
|
)
|
|
AND CASE WHEN sqlc.narg(long_distance)::bool THEN (ss.national = sqlc.narg(long_distance)::bool OR ss.nationalexp = sqlc.narg(long_distance)::bool) ELSE TRUE END
|
|
ORDER BY sr.count DESC;
|
|
|
|
-- name: GetStationById :one
|
|
SELECT s.id as "id",
|
|
s.name as "name",
|
|
sl.latitude as "latitude",
|
|
sl.longitude as "longitude",
|
|
bus,
|
|
taxi,
|
|
tram,
|
|
ferry,
|
|
subway,
|
|
national,
|
|
regional,
|
|
suburban,
|
|
regionalexp,
|
|
nationalexp
|
|
FROM stops s
|
|
JOIN public.stat_locations sl
|
|
on sl.id = s.location_id
|
|
JOIN public.stat_services ss
|
|
on ss.id = s.service_id
|
|
WHERE s.id = @stop_id;
|
|
|
|
-- name: GetDeparturesById :many
|
|
SELECT DISTINCT (t.id) as "id",
|
|
t.line_name as "lineName",
|
|
t.line_productname as "lineProductName",
|
|
so.departuredelay as "departureDelay",
|
|
jsonb_build_object('id', sd.id, 'name', sd.name) as "direction",
|
|
ARRAY((SELECT jsonb_build_object('stop', row('id', sd.id, 'name', sd.name),
|
|
'arrival', so2.arrival,
|
|
'plannedArrival', so2.plannedarrival,
|
|
'arrivalDelay', so2.arrivaldelay,
|
|
'arrivalPlatform', so2.arrivalplatform,
|
|
'plannedArrivalPlatform', so2.plannedarrivalplatform,
|
|
'cancelled', so2.cancelled)
|
|
FROM stopovers so2
|
|
JOIN public.stops s2
|
|
ON so2.stop = s2.id
|
|
WHERE so2.id = t.id
|
|
AND so2.plannedarrival > so.planneddeparture
|
|
AND (so2.stop, so2.realtimedataupdatedat) IN (SELECT DISTINCT (stop), max(realtimedataupdatedat)
|
|
FROM stopovers so3
|
|
WHERE (so3.id = t.id
|
|
AND so3.realtimedataupdatedat <= @rt_updated_at)
|
|
GROUP BY so3.stop)))
|
|
AS "stopovers",
|
|
so.departure as "departure",
|
|
so.planneddeparture as "plannedDeparture",
|
|
so.departureplatform as "departurePlatform",
|
|
so.planneddepartureplatform as "plannedDeparturePlatform",
|
|
so.cancelled as "cancelled",
|
|
so.realtimedataupdatedat as "realtimeDataUpdatedAt"
|
|
FROM stopovers so
|
|
JOIN trips t ON so.id = t.id
|
|
JOIN public.trip_meta tm on t.id = tm.id
|
|
JOIN public.stops sd on t.destination = sd.id
|
|
WHERE so.stop = @stop_id
|
|
AND (so.id, so.realtimedataupdatedat) IN (SELECT DISTINCT (id), max(realtimedataupdatedat)
|
|
FROM stopovers so3
|
|
WHERE so3.stop = @stop_id
|
|
AND (so3.departure > @departure_from)
|
|
AND (so3.departure < @departure_to)
|
|
AND (so3.realtimedataupdatedat <= @rt_updated_at)
|
|
GROUP BY so3.id)
|
|
ORDER BY so.departure ASC;
|