이 질문은 SQL Server와 관련이 있습니다.두 행 간의 초 차이를 반환하는 SQL
select *
from mytable y1
where size = 91
and not exists (select 1
from mytable y2
where y1.productcode = y2.productcode and y2.size = 92)
나는 다음과 같은 결과를 얻을 : :이 SQL 문을 실행할 때
id size batch code product code additiontime
--------------------------------------------------------
1 91 55555 BigD Red 2017-05-15 13:00:00
2 91 55555 BigD Red 2017-05-15 13:00:05
3 94 55555 BigD Red 2017-05-15 13:00:15
4 91 44444 BigD Blue 2017-05-15 14:10:00
5 92 44444 BigD Blue 2017-05-15 14:15:00
6 93 44444 BigD Blue 2017-05-15 14:20:00
7 94 44444 BigD Blue 2017-05-15 14:30:00
8 91 33333 BigD Orange 2017-05-15 15:00:00
9 91 33333 BigD Orange 2017-05-15 15:00:10
10 94 33333 BigD Orange 2017-05-15 15:00:15
가 :
id size batch code product code additiontime
--------------------------------------------------------
1 91 55555 BigD Red 2017-05-15 13:00:00
2 91 55555 BigD Red 2017-05-15 13:00:05
8 91 33333 BigD Orange 2017-05-15 15:00:00
9 91 33333 BigD Orange 2017-05-15 15:00:10
을 나는 위의 쿼리를 이렇게 수정하고 싶습니다 나는 다음과 같은 테이블이 일괄 처리 코드 당 하나의 행이 표시되고 각 일괄 처리 코드 그룹의 첫 번째 레코드와 두 번째 레코드 사이의 차이를 초 단위로 표시하기 위해 추가 열이 추가됩니다 (예 :
).id size batch code product code additiontime seconds difference
--------------------------------------------------------------------------------------
1 91 55555 BigD Red 2017-05-15 13:00:00 5
8 91 33333 BigD Orange 2017-05-15 15:00:00 10
는 거의 트릭을 수행하는 다음과 같은 SQL을 시도했지만 대신 배치 코드 당 하나의 여러 행을 반환
WITH rows AS
(
SELECT
*,
ROW_NUMBER() OVER (ORDER BY AdditionTime) AS rn
FROM
mytable y1
WHERE
size = 91
AND NOT EXISTS (SELECT *
FROM mytable y2
WHERE y1.productcode = y2.productcode AND y2.size = 92)
)
SELECT DATEDIFF(second, mc.AdditionTime, mp.AdditionTime)
FROM rows mc
JOIN rows mp ON mc.rn = mp.rn - 1
내 SQL에 대한 지식이 크지 않다. 올바른 결과를 낼 수는 있지만 모든 방법을 시도해 보았습니다. 성공하지 못했습니다. 모든 포인터에 미리 감사드립니다.
당신은 항상 두 행 사이에 차이를 할 것으로 기대합니까? 아니면 더 많이 기대합니까? 그렇다면 어떻게 diff를 계산하고 싶습니까? – Tanner
SQL Server 2012 이상을 사용하는 경우 [창 기능] (https://www.simple-talk.com/sql/learn-sql-server/window-functions-in-sql-server/)을 사용할 수 있습니다. . over 절을 사용하면 이전 행을 선택하고 적절한 DATEDIFF를 수행 할 수 있습니다. – PacoDePaco
@Tanner - 항상 2 행을 기대합니다. –