DB からサンプル値を取得する SQL ステートメントを作成しようとしています。テーブルには、CNC マシンの工具交換に関連する値が含まれています。私が持っている現在のステートメントは値を適切に引き出しますが、特定のプログラムに対してツールが 1 回出現する場合のみです。ツールが複数回表示される場合、時間の値は最初のロードから最後のロードまでに対応します。TIME 列は 1 つしかなく、その最初と最後の発生を見つけることで、ツールのイン/アウト時間を判断できます。
基本的な例:
Raw Data:
Tool_Number TIME
100 12:00
100 12:01
100 12:02
100 12:03
Current Query Returns:
Tool_Number TIME_IN TIME_OUT
100 12:00 12:03
ただし、TOP および DISTINCT ルールを使用できなくなったため、ツールが複数回表示されると事態は複雑になります。
Raw Data:
Tool_Number TIME
100 12:00
100 12:01
100 12:02
100 12:03
200 12:04
200 12:05
100 12:06
100 12:07
Current Query Returns:
Tool_Number TIME_IN TIME_OUT
100 12:00 12:07
200 12:04 12:05
Ideal Query Returns:
Tool_Number TIME_IN TIME_OUT
100 12:00 12:03
200 12:04 12:05
100 12:06 12:07
私たちは時間分析を行っていますが、もちろん、これは合計時間値を大幅に台無しにしています。現在のクエリは次のとおりです。
SELECT * FROM (SELECT DISTINCT SPINDLE_POT FROM TBL_SPINDLE_DATA_M1
WHERE TIME BETWEEN '4/3/20131:24:13 PM' AND '4/3/2013 3:07:33 PM') AS A
CROSS APPLY
((SELECT TOP 1 TIME FROM TBL_SPINDLE_DATA_M1 B WHERE B.SPINDLE_POT = A.SPINDLE_POT AND
TIME BETWEEN '4/3/2013 1:24:13 PM' AND '4/3/2013 3:07:33 PM') AS NEWTABLE1
JOIN
(SELECT TOP 1 TIME FROM TBL_SPINDLE_DATA_M1 B WHERE B.SPINDLE_POT = A.SPINDLE_POT
AND TIME BETWEEN '4/3/2013 1:24:13 PM' AND '4/3/2013 3:07:33 PM' ORDER BY TIME DESC)
AS NEWTABLE2 ON (0=0))
私は決して SQL クエリの専門家ではありません。上記のクエリはひどく間違っている可能性がありますが、実際には必要なものが返されます。似たようなアイテムをグループ化する方法はありますが、インデックスが互いに接触していない場合はグループ化しないように十分に注意してください。