2017-09-22 2 views
0

다음 해결해야 할 문제가 있습니다.AZURE T-SQL 계산 결과가 새로보기로 표시됩니다.

테이블은 열 TIMEIN을 가지고 있는데 열 TIMEOUT, 다음 TIMEIN 가까이하지 않는 한이 60 초 더한 TIMEIN의 값을 취해야을 추가 할 수 있습니다.

그래서 : 알고

ID PROJECTCODE TIMEIN TIMEOUT 
---------------------------------- 
1 25847  35  79 = less as 60 seconds in between 35(id1) and 80(id2) 
2 25847  80  140 = more as 60 seconds in between 80(id2) and 158(id3) 
3 25847  158  218 = 60 added because there is no bigger time as 158sec. 
4 25847  35  79 = less as 60 seconds in between 35(id1) and 80(id2) 

중요는 ID의가 따르지 않는,뿐만 아니라 두 배 이상 동시에있을 수 있다는 것입니다. 내가 어떻게 그럴 수 있니? 내가 따라야 할 좋은 아이디어 나 문서?

+5

어떤 DBMS를 사용하고 있습니까? (예 : SQL Server, MySQL, Oracle) –

+2

[so]는 무료 코드 작성 서비스가 아닙니다. ** 직접 코드를 작성하려고 할 것입니다 **. [더 많은 연구를하다] (http://meta.stackoverflow.com/questions/261592) 문제가있는 경우 ** 시도한 것을 게시 할 수 있습니다 ** 작동하지 않는 것에 대한 명확한 설명 ** ** [mcve] **를 제공합니다. 좋은 질문과 [완벽한 질문] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)을 읽어 보는 것이 좋습니다. 또한, [투어]를해야합니다. – Igor

+0

예. 나는 그것을 알고 있으며 여러 번 해왔습니다. 나는 그것을 쓰라고하지 않으려 고합니다. 그러나 "당신이 읽을 수있는 좋은 생각이나 문서가 있습니까?"라고 묻는다면 묻습니다. 그래서 출발점이 있습니다. –

답변

3

LEAD()을 사용하여 다음 행의 값에 액세스 한 다음 CASE 문을 사용하여 60 초를 사용할지 여부를 결정할 수 있습니다. 이런 식으로 뭔가 :

SELECT ID, 
     PROJECTCODE, 
     TIMEIN, 
     CASE WHEN LEAD(TIMEIN) OVER (ORDER BY ID) - TIMEIN < 60 
      THEN LEAD(TIMEIN) OVER (ORDER BY ID) - 1 
      ELSE TIMEIN + 60 
     END AS TIMEOUT 
FROM TimesTable 

PARTITION BY PROJECTCODE를 추가해야 할 수도 있지만, 샘플 데이터에서 불분명하다.

+0

감사합니다. 아론은 이미 많은 도움을 주셨습니다. –

+0

@EwaldBos : 도움이 될 경우 대답을 수락하십시오. – TheGameiswar

+0

잠시 동안 미안하지만 기록이 남았습니다. –