gpt4 book ai didi

SQL查询按时间对项目进行分组,但前提是彼此靠近?

转载 作者:行者123 更新时间:2023-12-04 14:09:10 27 4
gpt4 key购买 nike

我正在尝试编写一个 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 查询专家!上面的查询可能是非常错误的,但它确实返回了我需要的东西。无论如何,是否可以对相似的项目进行分组,但如果它们的索引不相互接触,就不要对它们进行分组?

最佳答案

这被称为“岛屿问题”,我将其视为一种解决方案(来自 Itzik Ben Gan)

select  tool_number,
min(time) 'in',
max(time) 'out',
count(*)
from (
select tool_number,
time,
ROW_NUMBER() OVER (ORDER BY time) - ROW_NUMBER() OVER (PARTITION BY Tool_Number ORDER BY time) AS Grp
from #temp
) as a
group by grp, tool_number
order by min(time)

关于SQL查询按时间对项目进行分组,但前提是彼此靠近?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com