2010-07-08 1 views
0
 
+------+-------------------------+ 
| proc |     endTime | 
+------+-------------------------+ 
| A | 2010/01/01 12:10:00.000 | 
| B | 2010/01/01 12:08:00.000 | 
| C | 2010/01/01 12:05:00.000 | 
| D | 2010/01/01 12:02:00.000 | 
| ...|      ... |

기본적으로 데이터베이스에서 가져온 데이터는 첫 번째 열이 프로세스 이름이고 두 번째 열이 실행 완료일 때와 같습니다. 세 번째 열을 추가하여 프로세스의 실행 시간을 표시하고 싶습니다.SQL - 파생 날짜 차이 열

는 기본적으로, 데이터가 대신이처럼 보이도록 당겨 원하는 :

 
+------+-------------------------+--------------+ 
| proc |     endTime | runningTime | 
+------+-------------------------+--------------+ 
| A | 2010/01/01 12:10:00.000 |    | (process a is not done running) 
| B | 2010/01/01 12:08:00.000 | 00:03:00.000 | 
| C | 2010/01/01 12:05:00.000 | 00:03:00.000 | 
| D | 2010/01/01 12:02:00.000 | 00:02:00.000 | (assume 12:00 start time) 
| ...|      ... |   ... |

을 그리고 나는 그것이 startTime 열을 추가 쉬울 것 알고 그에서 runningTime을 결정,하지만 난에 액세스 할 수 없습니다 그것을 바꾸면 어쨌든 이전 데이터에는 startTime이 없으므로 어쨌든 작동합니다.

첫 번째 프로세스의 시작 시간은 임의적이지만 내가 무엇을 얻고 있는지 알 수 있습니다. 우리는 proc D가 종료 된 시점과 proc C가 종료 된 시점을 기준으로 proc C의 실행 시간을 알고 있습니다 (두 번째에서 첫 번째를 뺍니다).

"행 X 색 B"와 "행 X-1 색 B"의 차이를 기반으로 세 번째 행을 어떻게 계산합니까?

+0

MySQL 결과와 비슷합니다. DBMS는 무엇을 사용하고 있습니까? – Mike

+0

Microsoft SQL Server, 분명히 알았어 야합니다. – gjk

+0

MySQL이 아닌 SQL로 태그를 지정했습니다. 예제 출력이 MySQL과 비슷하게 보입니다. 변수를 데이터를 반환하는 SELECT에 할당 할 수 없기 때문에 MS SQL에서 사용한 MySQL 메서드를 복제 할 수 있는지 여부는 알 수 없습니다. – Mike

답변

1

"계산 된 열"로 추가 할 수 있다고 생각하지 않습니다. 비슷한 뭔가 트리거에서 그것을 계산할 수

select 
    e1.RowID, 
    e2.EndTime as StartTime, 
    e1.EndTime, runningtime=convert(varchar(20), e1.EndTime - e2.EndTime, 114) 
from endtimetest e1 
    left join endtimetest e2 on e2.endtime = 
      (Select max(endtime) 
       from endtimetest 
       where endtime < e1.Endtime) 

을 또는 (. MSSQL에 대한 모든 코드를 귀하의 변환 기능은 다를 수 있음)이 같은 아주 쉽게보기에서 계산할 수 있습니다.

+0

나는 이것과 함께 갔다. 많은 레코드가 있기 때문에 시간이 걸리지 만 작업이 완료되었습니다. – gjk