我正在尝试制作一个 SQL 语句来从数据库中提取样本值。该表包含与 CNC 机床中的刀具更换有关的值。我当前的语句正确地提取了值,但前提是给定程序中出现了一次该工具。如果工具出现多次,则时间值对应于从第一次加载到最后一次加载。只有一个 TIME 列,通过查找它的第一次和最后一次出现,我可以确定工具进/出时间。
基本示例:
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 查询专家!上面的查询可能非常错误,但它确实返回了我需要的内容。有没有办法对类似的项目进行分组,但如果它们的索引不相互接触,就不要对它们进行分组吗?