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が私の問題です。

したがってAssembly、 とPre-Finalは、ユニットがスキャンされる 2 つの異なる駅の名前AssemblyですPre-Final

私がやろうとしているのは、ユニットがスキャンアウトしてからスキャンインするまでの経過時間を計算することAssemblyですPre-Finalcomplete_timeユニットがステーションからスキャンアウトされたときにマークされ、start_timeスキャンインされたときにマークされます。

現在、私のクエリは機能しません。これは最初の駅であるため、start_timeとの両方がcomplete_time参照されているためです。Assemblyしかし、complete_time参照したいのに参照しAssemblyたい。start_timePre-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

データベース構造を完全には理解していませんが、サブクエリを使用して各アイテムを 2 回プルできる必要がある場合。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 に答える