0

这是我当前的查询:

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是我的问题。

所以AssemblyPre-Final是扫描单元的两个不同站点的名称。Assembly通常排在第一位,紧随其后的是Pre-Final

我要做的是计算一个单元扫描出之后Assembly和该单元扫描到Pre-Final. complete_time当一个单元被扫描出站时标记,start_time当它被扫描到时。

现在,我的查询不起作用,因为两者都start_time引用complete_timeAssembly因为它是第一站。但是,我想complete_time参考,Assembly而我想start_time参考Pre-Final.

我该怎么做呢?

4

2 回答 2

1

也许使用

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,

等等

于 2012-08-09T23:40:08.567 回答
0

我不完全了解您的数据库结构,但是如果您应该能够使用子查询为每个项目提取两次。下面是代码的样例,假设 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
于 2012-08-09T23:47:51.700 回答