119 lines
4.4 KiB
SQL
119 lines
4.4 KiB
SQL
/*
|
|
* SpeedingEvents SPEEDING extraction for the bytebar tachograph schema.
|
|
*
|
|
* The source row is an interval. The normalized event contract is point-based,
|
|
* so this query emits a BEGIN point at BeginTime and an END point at EndTime.
|
|
*/
|
|
with OrgTree as (
|
|
select org.I_90021_OID
|
|
from dbo.GetOrganisationTree(null, :organisationId, 0, null) org
|
|
where :organisationId is not null
|
|
)
|
|
,
|
|
Base as (
|
|
select
|
|
speeding.ID,
|
|
speeding.BeginTime,
|
|
speeding.EndTime,
|
|
speeding.AvgSpeed,
|
|
speeding.MaxSpeed,
|
|
speeding.ID_FileLog,
|
|
speeding.ID_VUInstallation,
|
|
c.ID as card_id,
|
|
c.ID_Driver as driver_id,
|
|
cn.AlphaCode as driver_card_nation,
|
|
c.CardNumber as driver_card_number,
|
|
vui.ID_FileLog as vui_filelog_id,
|
|
vui.ID_VehicleIdentification,
|
|
vi.ID as vehicle_identification_id,
|
|
vi.VIN as vehicle_vin,
|
|
coalesce(fl.DownloadDate, fl.OriginalDownloadDate, fl.TStamp, fl.CreationDate) as received_partner_at,
|
|
coalesce(fl.ID, speeding.ID_FileLog, vui.ID_FileLog, speeding.ID) as source_package_id_raw,
|
|
coalesce(fl.ID_VehicleIdentification, vui.ID_VehicleIdentification) as source_package_entity_id_raw,
|
|
coalesce(fl.DownloadFrom, speeding.BeginTime) as source_package_period_from,
|
|
coalesce(fl.DownloadTo, speeding.EndTime, speeding.BeginTime) as source_package_period_to,
|
|
coalesce(fl.CreationDate, fl.TStamp) as source_package_imported_at
|
|
from dbo.SpeedingEvents speeding
|
|
join dbo.VUInstallation vui on vui.ID = speeding.ID_VUInstallation
|
|
join dbo.VehicleIdentification vi on vi.ID = vui.ID_VehicleIdentification
|
|
left join dbo.Card c on c.ID = speeding.ID_Card
|
|
left join dbo.Nation cn on cn.ID = c.ID_Nation
|
|
left join dbo.FileLog fl on fl.ID = coalesce(speeding.ID_FileLog, vui.ID_FileLog)
|
|
where (
|
|
:occurredFrom is null
|
|
or speeding.BeginTime >= :occurredFrom
|
|
or speeding.EndTime >= :occurredFrom
|
|
)
|
|
and (
|
|
:occurredTo is null
|
|
or speeding.BeginTime < :occurredTo
|
|
or speeding.EndTime < :occurredTo
|
|
)
|
|
)
|
|
,
|
|
Events as (
|
|
select
|
|
base.*,
|
|
base.BeginTime as occurred_at,
|
|
'BEGIN' as lifecycle
|
|
from Base base
|
|
union all
|
|
select
|
|
base.*,
|
|
base.EndTime as occurred_at,
|
|
'END' as lifecycle
|
|
from Base base
|
|
)
|
|
select
|
|
concat(cast(events.ID as varchar(128)), ':', events.lifecycle) as source_row_id,
|
|
concat('TACHOGRAPH:SPEEDING_EVENTS:', events.ID, ':', events.lifecycle) as external_source_event_id,
|
|
|
|
events.occurred_at,
|
|
events.received_partner_at,
|
|
cast(events.AvgSpeed as decimal(10, 2)) as avg_speed_kmh,
|
|
cast(events.MaxSpeed as decimal(10, 2)) as max_speed_kmh,
|
|
events.lifecycle,
|
|
|
|
cast(events.driver_id as varchar(128)) as driver_source_entity_id,
|
|
events.driver_card_nation,
|
|
events.driver_card_number,
|
|
|
|
cast(events.vehicle_identification_id as varchar(128)) as vehicle_source_entity_id,
|
|
events.vehicle_vin,
|
|
cast(v.ID as varchar(128)) as vehicle_registration_source_entity_id,
|
|
vn.AlphaCode as vehicle_registration_nation,
|
|
v.VRN as vehicle_registration_number,
|
|
|
|
'VEHICLE_UNIT' as source_package_kind,
|
|
cast(events.source_package_id_raw as varchar(128)) as source_package_id,
|
|
cast(events.source_package_entity_id_raw as varchar(128)) as source_package_entity_id,
|
|
events.source_package_period_from,
|
|
events.source_package_period_to,
|
|
events.source_package_imported_at
|
|
from Events events
|
|
outer apply (
|
|
select top 1 vehicle.ID,
|
|
vehicle.VRN,
|
|
vehicle.ID_Nation
|
|
from dbo.Vehicle vehicle
|
|
where vehicle.ID_VehicleIdentification = events.vehicle_identification_id
|
|
and (vehicle.ValidFrom is null or vehicle.ValidFrom <= events.occurred_at)
|
|
and (vehicle.ValidTo is null or vehicle.ValidTo > events.occurred_at)
|
|
order by
|
|
vehicle.ValidFrom desc,
|
|
vehicle.ID desc
|
|
) v
|
|
left join dbo.Nation vn on vn.ID = v.ID_Nation
|
|
where (:occurredFrom is null or events.occurred_at >= :occurredFrom)
|
|
and (:occurredTo is null or events.occurred_at < :occurredTo)
|
|
and (
|
|
:organisationId is null
|
|
or exists (
|
|
select 1
|
|
from dbo.Vehicle_I_90021 rel
|
|
join OrgTree on OrgTree.I_90021_OID = rel.ID_I_90021
|
|
where rel.ID_Vehicle = v.ID
|
|
and rel.GILT_BIS is null
|
|
)
|
|
)
|