[英]SQL how to apply DateDiff for two different where clauses
這是我當前的查詢:
select serial_number, order_number,
(select TOP 1 PRODUCT_ID from PS_ORD_LINE PL
where PL.ORDER_NO = WO.order_number
and CAT_DESCR = 'SYSTEM' and ORD_LINE_STATUS = 'O'
ORDER BY ORDER_INT_LINE_NO) as model,
(select datediff(minute, min(complete_time), min(start_time))
from TRACKED_OBJECT_HISTORY TOH1
where TOH1.op_name IN ('Assembly', 'Pre-Final')
and TOH1.tobj_key = TOH.tobj_key) as waiting_time1,
from UNIT U
left join WORK_ORDER WO on U.order_key = WO.order_key
left join TRACKED_OBJECT_HISTORY TOH on TOH.tobj_key = U.unit_key
where WO.creation_time > '5/1/12' and WO.creation_time < '7/31/12'
group by serial_number, order_number, tobj_key
DateDiff
中間的部分是我的問題。
因此, Assembly
和Pre-Final
是台掃描兩種不同的站名。 Assembly
通常是在第一線,緊接着Pre-Final
。
我要做的是計算從單元掃描出Assembly
到該單元掃描到Pre-Final
之前的經過時間。 complete_time
標記何時將單元從工作站中掃描出, start_time
表示其被掃描時。
現在,我的查詢不起作用,因為start_time
和complete_time
引用Assembly
因為它是第一站。 但是,我希望complete_time
引用Assembly
而我希望start_time
引用Pre-Final
。
我應該怎么做呢?
也許使用
DATEDIFF(MINUTE,
(SELECT MIN(complete_time)
FROM TRACKED_OBJECT_HISTORY toh1
WHERE toh1.op_name = 'Pre-Final' AND toh1.tobj_key = toh.tobj_key),
(SELECT MIN(start_time)
FROM TRACKED_OBJECT_HISTORY toh2
WHERE toh2.op_name = 'Assembly' AND toh2.tobj_key = toh.tobj_key)
) AS waiting_time1,
等等
我不完全了解您的數據庫結構,但是如果您應該能夠使用子查詢為每個項目提取兩次。 這是代碼示例的示例,假設tobj_key引用一個對象,並且每個對象僅通過計算機一次。
SELECT
DateDiff(n,AssemblyTime,PrefinalTime)
FROM (
SELECT
tobj_key,
complete_time AS 'AssemblyTime'
FROM TRACKED_OBJECT_HISTORY
WHERE op_name = 'Assembly'
) AS sub1
JOIN (
SELECT
tobj_key,
start_time AS 'PrefinalTime'
FROM TRACKED_OBJECT_HISTORY
WHERE op_name = 'Assembly'
) AS sub2 ON sub1.tobj_key = sub2.robj_key
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.