2015-02-26 3 views
0

Я хочу рассчитать разницу между двумя полями даты в одной таблице, однако значения не находятся в одной строке. Пример таблицы нижеКак вы вычисляете разницу во времени между двумя разными строками в одной таблице?

ID Cust_ID Code  Order_Time   Delivery_Time  Duration 
1  4  Order 01/01/15 14:15 
2  5  order 02/02/15 18:30 
3  4  deliver       03/02/15 18:15 28:00 
4  6  order 04/02/15 16:22 

Мне нужно, чтобы вычислить время, потраченное (продолжительность) в часах, чтобы доставить заказ путем вычитания времени заказа для Cust_ID 4 из delivery_time для этого клиента. В приведенном выше примере я ввел цифру как 28 часов.

+0

Если записи кодируются, являются ли они доставкой или заказ, почему '' Delivery_Time' и Order_Time' различных полей. Разве они не просто «Время»? –

+1

Что делать, если * тот же клиент * (так Cust_Id тот же самый) сделал * несколько * заказов? –

+0

@Tripp Kinetics: не стоит вопрос - почему доставка_time не была обновлена ​​в «delivery_time» в самой записи заказа? (другими словами, что означает «delivery_time» для заказа, если не это?) – Veverke

ответ

0
SELECT t._cust_id, MAX(order_time) order_time, MAX(delivery_time) delivery_time, MAX(delivery_time) - MAX(order_time) as diff_time 
FROM yourTable t 
WHERE t.cust_id = 4 
GROUP BY t.cust_id 

или

SELECT 
     o.order_time, d.delivery_time, d.delivery_time - o.order_time as diff_time 
FROM yourTable o, yourTable d 
WHERE LOWER(o.code) = 'order' 
and LOWER(d.code) = 'deliver' 
AND o.cust_id = d.cust_id 
GROUP BY o._cust_id 

----- для обновления таблицы ----- вы можете проверить, если выполнены следующие работы? Я не уверен, что ...

UPDATE 
(
    SELECT 
      o.order_time, t.delivery_time order_delivery_time, d.delivery_time, d.delivery_time - o.order_time as diff_time 
    FROM yourTable o, yourTable d 
    WHERE LOWER(o.code) = 'order' 
    and LOWER(d.code) = 'deliver' 
    AND o.cust_id = d.cust_id 
    GROUP BY o._cust_id 
) t 
SET 
    t.order_delivery_time = t.diff_time 
+0

Мне это нужно, чтобы обновить таблицу а не предоставлять выход решений, поэтому столбцы продолжительности могут быть запрошены позже в разных отделах. также есть несколько клиентов, поэтому жесткое кодирование для одного идентификатора клиента не помогает с долгосрочным решением, – HardLeeWorking

+0

работает ли инструкция по обновлению выше? – Veverke

+0

@ Veverke, просто проработав это сейчас, я не понял, что вы дали одну и ту же таблицу 2 псевдонимов (o и t.) Только поняли, что это возможно. Я буду обновлять, когда я его запустил. спасибо – HardLeeWorking

0

Так благодаря Veverke, которые действительно помогли мне не только этот запрос, но лучшего понимания того, что я могу сделать в SQL (автообъединение).

Это ВЫБРАТЬ запрос, который работал:

SELECT 
     d.delivery_time - o.order_time as diff_time 
FROM yourTable o, yourTable d 
WHERE o.code = 'order' 
AND d.code = 'deliver' 
AND o.cust_id = d.cust_id 
GROUP BY o.cust_id, d.delivery_time,o.order_time 
ORDER BY o.cust_id; 
Смежные вопросы