Я пытаюсь получить желаемый вывод, который выглядит следующим образом
Driver_ID| Interval_Start_Time | Interval_End_Time | Clocked_In_Time | Clocked_Out_Time | Score
232 | 2019-04-02 00:00:00.000 | 2019-04-02 00:30:00.000 | 2019-04-02 00:10:00.000 | 2019-04-02 00:29:00.000 | 0.55
Моя цель - получить идентификатор через 30 минут или каждые полчаса, а их минимальное или самое раннее время синхронизируется имаксимальное или последнее время отключения в те же 30 минут или полчаса.
В данный момент у меня есть запрос
WITH TIME AS
(SELECT DISTINCT CASE
WHEN extract(MINUTE
FROM offer_time_utc)<30 THEN date_trunc('hour', offer_time_utc)
ELSE date_add('minute',30, date_trunc('hour', offer_time_utc))
END AS interval_start_time,
CASE
WHEN extract(MINUTE
FROM offer_time_utc)<30 THEN date_add('minute',30, date_trunc('hour', offer_time_utc))
ELSE date_add('hour',1, date_trunc('hour', offer_time_utc))
END AS interval_end_time
FROM integrated_delivery.trip_offer_fact offer
WHERE offer.business_day = date '2019-04-01' )
SELECT DISTINCT offer.Driver_ID,
offer.region_uuid,
interval_start_time,
interval_end_time,
min(sched.clocked_in_time_utc) AS clocked_in_time,
max(sched.clocked_out_time_utc) AS clocked_out_time,
cast(scores.acceptance_rate AS decimal(5,3)) AS acceptance_rate
FROM integrated_delivery.trip_offer_fact offer
JOIN TIME ON offer.offer_time_utc BETWEEN time.interval_start_time AND time.interval_end_time
JOIN integrated_delivery.courier_actual_hours_fact sched ON offer.Driver_ID = sched.Driver_ID
JOIN integrated_product.driver_score_v2 scores ON offer.Driver_ID = scores.courier_id
AND offer.region_uuid = scores.region_id
AND offer.region_uuid = sched.region_uuid
AND offer.business_day = date '2019-04-01'
AND sched.business_day = date '2019-04-01'
AND scores.extract_dt = 20190331
AND offer.region_uuid IN('930c534f-a6b6-4bc1-b26e-de5de8930cf9')
GROUP BY 1,2,3,4,7
Но, похоже, он не дает мне правильное минимальное и максимальное время включения и выключения в этом правильном интервале, как показано ниже,
driver_uuid region_uuid interval_start_time interval_end_time clocked_in_time clocked_out_time score
232 bbv 2019-04-01 14:30:00.000 2019-04-01 15:00:00.000 2019-04-01 14:43:13.140 2019-04-01 22:30:46.043 0.173
Когда я добавляю в эти 2 строки,
JOIN TIME ON sched.clocked_in_time_utc BETWEEN time.interval_start_time AND time.interval_end_time
jOIN TIME ON sched.clocked_out_time_utc BETWEEN time.interval_start_time AND time.interval_end_time
Это дает мне ошибку, так как я не думаю, что это правильно.Как правильно установить минимальное и максимальное значения времени входа и выхода для правильного интервала?Это означает, что я хочу только самое раннее синхронизированное время и самое последнее синхронизированное время в это время начала и конца интервала в полчаса.
Я ценю всех, кто смотрит!Спасибо